GriffinForms – Contact Form and Form Builder Security & Risk Analysis

wordpress.org/plugins/griffinforms-form-builder

Drag and drop WordPress form builder plugin. Create contact forms, multi-step forms, user registration forms, file upload forms, and payment forms.

10 active installs v3.2.4.0 PHP 8.2+ WP 6.6+ Updated Jul 12, 2026
conditional-logiccontact-formfile-uploadform-builderregistration-form
100
A · Safe
CVEs total0
Unpatched0
Last CVENever
Safety Verdict

Is GriffinForms – Contact Form and Form Builder Safe to Use in 2026?

Generally Safe

Score 100/100

GriffinForms – Contact Form and Form Builder has no known CVEs and is actively maintained. It's a solid choice for most WordPress installations.

No known CVEs Updated 1mo ago
Risk Assessment

The griffinforms-form-builder v3.0.1.0 plugin exhibits a mixed security posture. On the positive side, it demonstrates strong adherence to secure coding practices with 100% of SQL queries using prepared statements and 96% of outputs being properly escaped. The absence of any recorded CVEs, past or present, is a significant strength, indicating a generally well-maintained and secure codebase over time.

However, several concerns warrant attention. The plugin exposes a substantial attack surface with 123 AJAX handlers, and critically, 71 of these lack authentication checks, presenting a significant vulnerability. Furthermore, the taint analysis reveals 35 high-severity flows with unsanitized paths, despite no critical ones being identified. The presence of the `unserialize` function, although used with dangerous function signals, is a potential point of concern if not handled with extreme care against serialized data from untrusted sources. The use of bundled libraries like PHPMailer and Stripe PHP, while common, requires diligence in ensuring they are kept up-to-date to avoid inheriting vulnerabilities from those dependencies.

In conclusion, while the plugin benefits from excellent SQL and output sanitization and a clean vulnerability history, the large number of unprotected AJAX endpoints and the high number of unsanitized taint flows are major weaknesses. The potential risks associated with `unserialize` and bundled libraries also necessitate caution. Addressing the unprotected AJAX handlers and thoroughly reviewing the high-severity taint flows should be the immediate priority to improve its security.

Key Concerns

  • Large attack surface without auth checks on AJAX
  • High severity taint flows with unsanitized paths
  • Dangerous function 'unserialize' usage
  • Bundled library PHPMailer
  • Bundled library Stripe PHP
Vulnerabilities
None known

GriffinForms – Contact Form and Form Builder Security Vulnerabilities

No known vulnerabilities — this is a good sign.
Version History

GriffinForms – Contact Form and Form Builder Release Timeline

v3.2.4.0Current
v3.2.3.0
v3.2.2.0
v3.2.1.0
v3.2.0.0
v3.1.9.0
v3.1.8.0
v3.1.7.0
v3.1.6.0
v3.1.5.0
v3.1.4.0
v3.1.3.0
v3.1.2.0
v3.1.1.0
v3.1.0.0
v3.0.9.0
v3.0.8.0
v3.0.7.0
v3.0.6.0
v3.0.4.0
Code Analysis
Analyzed Apr 16, 2026

GriffinForms – Contact Form and Form Builder Code Analysis

Dangerous Functions
4
Raw SQL Queries
0
559 prepared
Unescaped Output
290
6379 escaped
Nonce Checks
57
Capability Checks
44
File Operations
13
External Requests
13
Bundled Libraries
2

Dangerous Functions Found

unserialize$unserialized = @unserialize($theme->$field);admin/sql/app.php:1385
unserialize$decoded = @unserialize($form_style);frontend/html/themes/themecssgen.php:1603
unserialize$decoded = @unserialize($field_style);frontend/html/themes/themecssgen.php:1646
unserialize$unserialized = @unserialize($value);items/formtheme.php:1230

Bundled Libraries

PHPMailerStripe PHP

SQL Query Safety

100% prepared559 total queries

Output Escaping

96% escaped6669 total outputs
Data Flows · Security
64 unsanitized

Data Flow Analysis

25 flows64 with unsanitized paths
getConditionItemTypesJs (admin/app/html/modals/conditionallogic/requests.php:27)
Source (user input) Sink (dangerous op) Sanitizer Transform Unsanitized Sanitized
Attack Surface
71 unprotected

GriffinForms – Contact Form and Form Builder Attack Surface

Entry Points123
Unprotected71

AJAX Handlers 123

authwp_ajax_dbTableListadmin/ajax/field.php:50
authwp_ajax_dbColumnListadmin/ajax/field.php:51
authwp_ajax_sendItemsToModaladmin/ajax/form.php:161
authwp_ajax_sendItemCountadmin/ajax/form.php:162
authwp_ajax_sendFoundItemsadmin/ajax/form.php:163
authwp_ajax_checkEmailFieldadmin/ajax/form.php:164
authwp_ajax_griffinformsGetRulesCountadmin/ajax/form.php:165
authwp_ajax_griffinforms_get_form_fieldsadmin/ajax/form.php:166
authwp_ajax_exportFormadmin/ajax/forms.php:441
authwp_ajax_importFormadmin/ajax/forms.php:442
authwp_ajax_createFormFromTemplateadmin/ajax/forms.php:443
authwp_ajax_getFormTemplatesadmin/ajax/forms.php:444
authwp_ajax_createBlankFormadmin/ajax/forms.php:445
authwp_ajax_uploadTemplateadmin/ajax/forms.php:446
authwp_ajax_searchTemplatesadmin/ajax/forms.php:447
authwp_ajax_deleteFormsadmin/ajax/forms.php:449
authwp_ajax_griffinforms_run_retention_cleanupadmin/ajax/forms.php:450
authwp_ajax_griffinforms_reset_lifetime_submission_countadmin/ajax/forms.php:451
authwp_ajax_exportThemeadmin/ajax/formtheme.php:10
authwp_ajax_deleteItemadmin/ajax/lists.php:240
authwp_ajax_deleteItemsadmin/ajax/lists.php:241
authwp_ajax_duplicateItemadmin/ajax/lists.php:242
authwp_ajax_updateSettingsadmin/ajax/settings.php:173
authwp_ajax_griffinformsManageDeviceRegistryadmin/ajax/settings.php:174
authwp_ajax_createItemadmin/ajax/single.php:574
authwp_ajax_updateItemadmin/ajax/single.php:575
authwp_ajax_reloadItemHistoryadmin/ajax/single.php:576
authwp_ajax_getFormWarningCountadmin/ajax/single.php:577
authwp_ajax_getStatusbarOverlayContentadmin/ajax/single.php:578
authwp_ajax_griffinforms_decrypt_passwordadmin/ajax/submission.php:158
authwp_ajax_griffinforms_mark_payment_paidadmin/ajax/submission.php:159
authwp_ajax_griffinforms_mark_payment_unpaidadmin/ajax/submission.php:160
authwp_ajax_griffinforms_get_submission_logsadmin/ajax/submission.php:161
authwp_ajax_griffinforms_download_compliance_metaadmin/ajax/submission.php:162
authwp_ajax_griffinforms_get_submission_accountsadmin/ajax/submission.php:163
authwp_ajax_griffinforms_validate_submission_account_actionadmin/ajax/submission.php:164
authwp_ajax_griffinforms_execute_submission_account_actionadmin/ajax/submission.php:165
authwp_ajax_griffinforms_uninstall_feedbackadmin/ajax/uninstallfeedback.php:12
authwp_ajax_getAccountRegistrationConfigadmin/app/html/modals/accounts/requests.php:9
authwp_ajax_getAccountRuleEditorDataadmin/app/html/modals/accounts/requests.php:10
authwp_ajax_getAccountRulesListHtmladmin/app/html/modals/accounts/requests.php:11
authwp_ajax_getAccountRuleEditorHtmladmin/app/html/modals/accounts/requests.php:12
authwp_ajax_saveAccountRegistrationConfigadmin/app/html/modals/accounts/requests.php:13
authwp_ajax_deleteAccountRegistrationRuleadmin/app/html/modals/accounts/requests.php:14
authwp_ajax_getConditionItemTypesadmin/app/html/modals/conditionallogic/responses.php:10
authwp_ajax_getConditionFieldTargetsadmin/app/html/modals/conditionallogic/responses.php:11
authwp_ajax_getConditionAttributesadmin/app/html/modals/conditionallogic/responses.php:12
authwp_ajax_getConditionEvaluatorsadmin/app/html/modals/conditionallogic/responses.php:13
authwp_ajax_getConditionInputadmin/app/html/modals/conditionallogic/responses.php:14
authwp_ajax_getSubeditorOverlayFieldsadmin/app/html/modals/conditionallogic/responses.php:15
authwp_ajax_getActionItemTypesadmin/app/html/modals/conditionallogic/responses.php:16
authwp_ajax_getActionFieldTargetsadmin/app/html/modals/conditionallogic/responses.php:17
authwp_ajax_getActionAttributesadmin/app/html/modals/conditionallogic/responses.php:18
authwp_ajax_getActionOperationsadmin/app/html/modals/conditionallogic/responses.php:19
authwp_ajax_getActionInputadmin/app/html/modals/conditionallogic/responses.php:20
authwp_ajax_saveRuleadmin/app/html/modals/conditionallogic/responses.php:21
authwp_ajax_deleteRuleEntryadmin/app/html/modals/conditionallogic/responses.php:22
authwp_ajax_deleteRuleadmin/app/html/modals/conditionallogic/responses.php:23
authwp_ajax_getRuleadmin/app/html/modals/conditionallogic/responses.php:24
authwp_ajax_fetchRulesadmin/app/html/modals/conditionallogic/responses.php:25
authwp_ajax_getFormNameadmin/app/html/modals/dialogueboxes/deleteform.php:183
authwp_ajax_deleteFormadmin/app/html/modals/dialogueboxes/deleteform.php:184
authwp_ajax_getFormThemeCategoriesadmin/app/html/modals/formthemes/responses.php:12
authwp_ajax_getFormThemesByCategoryadmin/app/html/modals/formthemes/responses.php:13
authwp_ajax_applyFormThemeadmin/app/html/modals/formthemes/responses.php:14
authwp_ajax_importFormThemeadmin/app/html/modals/formthemes/responses.php:15
authwp_ajax_getIntegrationsListadmin/app/html/modals/integrations/requests.php:21
authwp_ajax_getIntegrationInfoadmin/app/html/modals/integrations/requests.php:24
authwp_ajax_getIntegrationConfigurationFormadmin/app/html/modals/integrations/requests.php:27
authwp_ajax_saveIntegrationConfigurationadmin/app/html/modals/integrations/requests.php:28
authwp_ajax_testIntegrationadmin/app/html/modals/integrations/requests.php:31
authwp_ajax_disableIntegrationadmin/app/html/modals/integrations/requests.php:32
authwp_ajax_getFormIntegrationSettingsadmin/app/html/modals/integrations/requests.php:35
authwp_ajax_saveFormIntegrationSettingsadmin/app/html/modals/integrations/requests.php:36
authwp_ajax_getReusableFieldsadmin/app/html/widgets/leftsidebar/fieldselection.php:396
authwp_ajax_getFormLayoutHtmladmin/app/html/widgets/presentationarea/formlayout.php:3346
authwp_ajax_updateItemNameadmin/app/html/widgets/presentationarea/formlayout.php:3347
authwp_ajax_updateItemHeadingadmin/app/html/widgets/presentationarea/formlayout.php:3348
authwp_ajax_updateItemDescriptionadmin/app/html/widgets/presentationarea/formlayout.php:3349
authwp_ajax_createFormElementadmin/app/html/widgets/presentationarea/formlayout.php:3350
authwp_ajax_attachFormElementadmin/app/html/widgets/presentationarea/formlayout.php:3351
authwp_ajax_getFormElementHtmladmin/app/html/widgets/presentationarea/formlayout.php:3352
authwp_ajax_createFieldadmin/app/html/widgets/presentationarea/formlayout.php:3353
authwp_ajax_updateRowColumnFieldsadmin/app/html/widgets/presentationarea/formlayout.php:3354
authwp_ajax_updateFormPageRowsadmin/app/html/widgets/presentationarea/formlayout.php:3355
authwp_ajax_createRowColumnadmin/app/html/widgets/presentationarea/formlayout.php:3356
authwp_ajax_updateRowColumnWidthsadmin/app/html/widgets/presentationarea/formlayout.php:3357
authwp_ajax_attachRowColumnadmin/app/html/widgets/presentationarea/formlayout.php:3358
authwp_ajax_updatePageRowColumnsadmin/app/html/widgets/presentationarea/formlayout.php:3359
authwp_ajax_updateFormFormPagesadmin/app/html/widgets/presentationarea/formlayout.php:3360
authwp_ajax_getFormsTableContentadmin/app/html/widgets/presentationarea/formstable.php:107
authwp_ajax_getReusableFieldsadmin/app/html/widgets/rightsidebar/fieldselection.php:323
authwp_ajax_getFormLogsTimelineContentadmin/app/html/widgets/rightsidebar/formlogstimeline.php:99
authwp_ajax_getFormSummaryWidgetContentadmin/app/html/widgets/rightsidebar/formsummary.php:234
authwp_ajax_griffinforms_getFormTreeContentadmin/app/html/widgets/rightsidebar/formtree.php:303
authwp_ajax_getItemSummaryContentadmin/app/html/widgets/rightsidebar/itemsummary.php:488
authwp_ajax_deleteSelectedItemadmin/app/html/widgets/rightsidebar/itemsummary.php:489
authwp_ajax_removeSelectedFieldadmin/app/html/widgets/rightsidebar/itemsummary.php:490
authwp_ajax_getFormsSummaryContentadmin/app/html/widgets/rightsidebar/multiformsummary.php:121
authwp_ajax_griffinforms_update_nav_labeladmin/app/html/widgets/rightsidebar/pagenavigationeditor.php:337
authwp_ajax_getRecentEntriesContentadmin/app/html/widgets/rightsidebar/recententries.php:698
authwp_ajax_getRecentSubmissionsContentadmin/app/html/widgets/rightsidebar/recentsubmissions.php:219
authwp_ajax_getFormSummaryContentadmin/app/html/widgets/rightsidebar/singleformsummary.php:132
authwp_ajax_griffinforms_create_payment_intentfrontend/ajax/payments.php:31
noprivwp_ajax_griffinforms_create_payment_intentfrontend/ajax/payments.php:32
authwp_ajax_griffinforms_resume_payment_intentfrontend/ajax/payments.php:34
noprivwp_ajax_griffinforms_resume_payment_intentfrontend/ajax/payments.php:35
authwp_ajax_griffinforms_complete_paymentfrontend/ajax/payments.php:37
noprivwp_ajax_griffinforms_complete_paymentfrontend/ajax/payments.php:38
noprivwp_ajax_saveFormpagefrontend/ajax/submission.php:1729
authwp_ajax_saveFormpagefrontend/ajax/submission.php:1730
noprivwp_ajax_recordSubmissionEventfrontend/ajax/submission.php:1731
authwp_ajax_recordSubmissionEventfrontend/ajax/submission.php:1732
noprivwp_ajax_fileUploadTempfrontend/ajax/submission.php:1733
authwp_ajax_fileUploadTempfrontend/ajax/submission.php:1734
authwp_ajax_fileUploadDeletefrontend/ajax/submission.php:1735
noprivwp_ajax_fileUploadDeletefrontend/ajax/submission.php:1736
authwp_ajax_griffinformsFetchTermsfrontend/ajax/terms.php:10
noprivwp_ajax_griffinformsFetchTermsfrontend/ajax/terms.php:11
noprivwp_ajax_dbValidatefrontend/ajax/validations.php:98
authwp_ajax_dbValidatefrontend/ajax/validations.php:99
noprivwp_ajax_validateAccountRegistrationEmailfrontend/ajax/validations.php:100
authwp_ajax_validateAccountRegistrationEmailfrontend/ajax/validations.php:101
WordPress Hooks 49
actiongriffinforms_files_after_promoteadmin/actions/submission.php:15
actiongriffinforms/files/after_promoteadmin/actions/submission.php:16
actiongriffinforms_before_delete_submissionadmin/actions/submissions.php:15
actionadmin_print_footer_scriptsadmin/app/format.php:23
actionadmin_enqueue_scriptsadmin/deactivationwarning.php:14
actioninitadmin/html/pages/single/settings.php:25
filteradmin_body_classadmin/menu.php:532
actionadmin_headadmin/menu.php:533
actionadmin_menuadmin/menu.php:666
actionadmin_menuadmin/menu.php:667
actionadmin_noticesadmin/menu.php:668
actionadmin_noticesadmin/menu.php:669
actionadmin_footeradmin/menu.php:670
actioninitadmin/stylesheets.php:287
actionin_admin_headeradmin/stylesheets.php:288
actionadmin_headadmin/stylesheets.php:289
filteradmin_body_classadmin/stylesheets.php:290
actionadmin_enqueue_scriptsadmin/uninstallfeedback.php:12
actionadmin_footer-plugins.phpadmin/uninstallfeedback.php:13
actionadmin_footer-plugins-network.phpadmin/uninstallfeedback.php:14
actionrest_api_initeditors/gutenberg/rest.php:25
filterupload_mimesfrontend/ajax/filehandler.php:1093
actioninitfrontend/shortcodes.php:29
actionadmin_initgriffinforms.php:69
actioninitgriffinforms.php:74
actiongriffinforms_pro_shell_activation_successgriffinforms.php:124
actionplugins_loadedgriffinforms.php:126
actiongriffinforms_register_post_submission_handlersgriffinforms.php:131
actionrest_api_initincludes/api/submissionsrest.php:51
actioninitincludes/api/webhookdelivery.php:23
actiongriffinforms_post_submission_after_pipelineincludes/api/webhookdelivery.php:24
filterwp_mail_content_typeincludes/mailer/servermail.php:48
actionplugins_loadedincludes/packages/packagebootstrap.php:32
actionactivated_pluginincludes/packages/packagebootstrap.php:33
actiondeactivated_pluginincludes/packages/packagebootstrap.php:34
actiondeleted_pluginincludes/packages/packagebootstrap.php:35
actionupgrader_process_completeincludes/packages/packagebootstrap.php:36
actionwp_mail_failedincludes/pipelines/accounts/lifecycleexecutor.php:452
actionwp_mail_succeededincludes/pipelines/accounts/lifecycleexecutor.php:453
filterwp_send_new_user_notification_to_adminincludes/pipelines/accounts/lifecycleexecutor.php:454
filterwp_privacy_personal_data_exportersincludes/privacy/personaldata.php:16
filterwp_privacy_personal_data_erasersincludes/privacy/personaldata.php:17
actiongriffinforms_send_autoresponderincludes/schedulers/emailscheduler.php:12
actiongriffinforms_send_admin_alertincludes/schedulers/emailscheduler.php:13
filtercron_schedulesincludes/schedulers/jobscheduler.php:17
filtercron_schedulesincludes/schedulers/jobscheduler.php:22
actiongriffinforms_process_jobsincludes/schedulers/jobscheduler.php:23
actiongriffinforms_log_cleanupincludes/schedulers/logcleanup.php:16
actioninitincludes/security/capabilities.php:34

Scheduled Events 2

griffinforms_process_jobs
griffinforms_log_cleanup
Maintenance & Trust

GriffinForms – Contact Form and Form Builder Maintenance & Trust

Maintenance Signals

WordPress version tested7.0.2
Last updatedJul 12, 2026
PHP min version8.2
Downloads4K

Community Trust

Rating100/100
Number of ratings4
Active installs10
Developer Profile

GriffinForms – Contact Form and Form Builder Developer Profile

griffinforms

1 plugin · 10 total installs

94
trust score
Avg Security Score
100/100
Avg Patch Time
30 days
View full developer profile
Detection Fingerprints

How We Detect GriffinForms – Contact Form and Form Builder

Patterns used to identify this plugin on WordPress sites during automated security audits and web crawling.

Asset Fingerprints

Asset Paths
/wp-content/plugins/griffinforms-form-builder/admin/css/admin-deactivation-warning.css/wp-content/plugins/griffinforms-form-builder/admin/css/admin-settings.css/wp-content/plugins/griffinforms-form-builder/admin/css/admin-uninstall-feedback.css/wp-content/plugins/griffinforms-form-builder/admin/css/admin-ui.css/wp-content/plugins/griffinforms-form-builder/admin/css/admin.css/wp-content/plugins/griffinforms-form-builder/admin/css/griffinforms.min.css/wp-content/plugins/griffinforms-form-builder/admin/js/admin-deactivation-warning.js/wp-content/plugins/griffinforms-form-builder/admin/js/admin-uninstall-feedback.js+7 more
Script Paths
griffinforms-form-builder/admin/js/admin.jsgriffinforms-form-builder/admin/js/admin-deactivation-warning.jsgriffinforms-form-builder/admin/js/admin-uninstall-feedback.jsgriffinforms-form-builder/admin/app/js/app.jsgriffinforms-form-builder/includes/vendors/select2/dist/js/select2.min.jsgriffinforms-form-builder/assets/js/frontend.js
Version Parameters
griffinforms-form-builder/admin/css/admin.css?ver=griffinforms-form-builder/admin/css/admin-deactivation-warning.css?ver=griffinforms-form-builder/admin/css/admin-settings.css?ver=griffinforms-form-builder/admin/css/admin-uninstall-feedback.css?ver=griffinforms-form-builder/admin/css/admin-ui.css?ver=griffinforms-form-builder/admin/css/griffinforms.min.css?ver=griffinforms-form-builder/admin/js/admin.js?ver=griffinforms-form-builder/admin/js/admin-deactivation-warning.js?ver=griffinforms-form-builder/admin/js/admin-uninstall-feedback.js?ver=griffinforms-form-builder/admin/app/js/app.js?ver=griffinforms-form-builder/includes/vendors/select2/dist/css/select2.min.css?ver=griffinforms-form-builder/includes/vendors/select2/dist/js/select2.min.js?ver=griffinforms-form-builder/assets/css/frontend.css?ver=griffinforms-form-builder/assets/js/frontend.js?ver=

HTML / DOM Fingerprints

CSS Classes
gf-fullscreengriffinforms-app-wrappergriffinforms-form-areagf-sidebar-leftgf-presentation-areagf-sidebar-rightgf-status-bargf-title-bar+3 more
HTML Comments
<!-- Main app HTML sent to the views page. --><!-- JS events which change view inside the app. --><!-- Secondary JS events which are dispatched on other app actions. --><!-- TEMP: opcache reset for debug. Remove after use. -->+1 more
Data Attributes
data-gf-app-componentdata-gf-target-viewdata-gf-event-type
JS Globals
GriffinFormsAppGriffinForms
REST Endpoints
/wp-json/griffinforms/v1/forms/wp-json/griffinforms/v1/forms/settings/wp-json/griffinforms/v1/forms/trash/wp-json/griffinforms/v1/submissions/wp-json/griffinforms/v1/submissions/search/wp-json/griffinforms/v1/submissions/export/wp-json/griffinforms/v1/submissions/count/wp-json/griffinforms/v1/fields/wp-json/griffinforms/v1/fields/new/wp-json/griffinforms/v1/fields/settings/wp-json/griffinforms/v1/themes/wp-json/griffinforms/v1/themes/settings/wp-json/griffinforms/v1/users/settings
FAQ

Frequently Asked Questions about GriffinForms – Contact Form and Form Builder