missing_direct_file_access_protection
Missing direct file access protection
A PHP file in the plugin can be loaded directly instead of through WordPress.
Why It Shows Up
Plugin Check found a PHP file without an early guard such as an ABSPATH check. Without that guard, a browser or script can request the file by path.
Why It Matters
Direct access can run code outside the normal WordPress bootstrap, expose output, or trigger assumptions about loaded functions, permissions, and request context.
How to Fix
- Add a guard near the top of PHP files that are not intended to be requested directly.
- Use `if ( ! defined( 'ABSPATH' ) ) { exit; }` before the file performs work or sends output.
- Keep template partials and bootstrap files protected too, not only the main plugin file.
Notes
- Files that are deliberately public endpoints should route through WordPress APIs or explicitly validate the request before doing work.
References
Affected Plugins
| Rank | Plugin | Score | Errors | Warnings | Installs | Added | Updated | Top Issue |
|---|---|---|---|---|---|---|---|---|
| #1 | BulletProof Security | 0 | 5,048 | 4,949 | 20k+ | Output is not escaped | ||
| #2 | Intercom | 0 | 60 | 71 | 6k+ | Non-prefixed function | ||
| #3 | Live Shopping & Shoppable Videos For WooCommerce | 0 | 78 | 175 | 400 | Non-prefixed global variable | ||
| #4 | Plugin Check (PCP) | 0 | 128 | 132 | 10k+ | Exception output is not escaped | ||
| #5 | Themify Builder | 9 | 5,207 | 2,125 | 5k+ | Text Domain Mismatch | ||
| #6 | JetBackup – Backup, Restore & Migrate | 10 | 1,563 | 149 | 200k+ | Exception output is not escaped | ||
| #7 | Easy WP SMTP – WordPress SMTP and Email Logs: Gmail SMTP, Office 365, Outlook, Custom SMTP, and more | 15 | 45 | 166 | 500k+ | Database parameter is not escaped | ||
| #8 | Visual Composer Website Builder | 16 | 82 | 320 | 40k+ | Non-prefixed global variable | ||
| #9 | MDTF – Meta Data and Taxonomies Filter | 16 | 1,550 | 1,956 | 1k+ | Non-prefixed global variable | ||
| #10 | AnyComment | 17 | 445 | 449 | 5k+ | Output is not escaped | ||
| #11 | Efí Bank | 17 | 886 | 553 | 400 | Exception output is not escaped | ||
| #12 | wpForo Forum | 17 | 4,054 | 3,033 | 20k+ | Unsafe printing function | ||
| #13 | WPtouch – Make your WordPress Website Mobile-Friendly | 17 | 1,466 | 325 | 50k+ | Text Domain Mismatch | ||
| #14 | Prime Slider Addons for Elementor | 18 | 3,500 | 229 | 100k+ | Text Domain Mismatch | ||
| #15 | JetFormBuilder — Dynamic Blocks Form Builder | 18 | 2,093 | 1,594 | 80k+ | Text Domain Mismatch | ||
| #16 | Pagopar – WooCommerce Gateway | 18 | 530 | 1,215 | 400 | Non-prefixed global variable | ||
| #17 | Podlove Podcast Publisher | 18 | 2,333 | 1,435 | 3k+ | Output is not escaped | ||
| #18 | Property Hive | 18 | 1,957 | 6,027 | 3k+ | Missing nonce verification | ||
| #19 | Realtyna Organic IDX plugin + WPL Real Estate | 18 | 930 | 3,636 | 2k+ | Non-prefixed global variable | ||
| #20 | RestroPress – Online Food Ordering System | 18 | 521 | 3,082 | 1k+ | Non-prefixed global variable | ||
| #21 | Shopping Cart & eCommerce Store | 18 | 5,541 | 17,397 | 3k+ | Non-prefixed global variable | ||
| #22 | WPPizza – A Restaurant Plugin | 18 | 4,689 | 2,703 | 1k+ | Text Domain Mismatch | ||
| #23 | Block Slider – Responsive Image Slider, Video Slider & Post Slider | 19 | 555 | 1,291 | 3k+ | Non-prefixed global variable | ||
| #24 | Download Monitor | 19 | 424 | 1,362 | 80k+ | Non-prefixed hook name | ||
| #25 | Advanced File Manager – Ultimate File Manager for WordPress And Document Library Solution | 19 | 1,218 | 901 | 100k+ | Exception output is not escaped | ||
| #26 | Go Fetch Jobs (for WP Job Manager) | 19 | 1,410 | 1,741 | 700 | Non-prefixed global variable | ||
| #27 | AI Infographic Maker | 19 | 1,517 | 599 | 600 | Output is not escaped | ||
| #28 | Leaflet Maps Marker (Google Maps, OpenStreetMap, Bing Maps) | 19 | 3,275 | 3,228 | 10k+ | Output is not escaped | ||
| #29 | Matomo Analytics – Powerful, Privacy-First Insights for WordPress | 19 | 1,911 | 877 | 100k+ | Exception output is not escaped | ||
| #30 | Netgsm | 19 | 334 | 308 | 1k+ | Setting is missing a sanitization callback | ||
| #31 | Verified Reviews (Avis Vérifiés) | 19 | 671 | 1,136 | 700 | Non-prefixed global variable | ||
| #32 | Razorpay Payment Button Plugin | 19 | 486 | 98 | 2k+ | Exception output is not escaped | ||
| #33 | Really Simple Security – Simple and Performant Security (formerly Really Simple SSL) | 19 | 540 | 389 | 3m+ | Missing Translators Comment | ||
| #34 | Membership Plugin – Kadence Memberships | 19 | 5,082 | 2,982 | 9k+ | Text Domain Mismatch | ||
| #35 | Scrollsequence – Cinematic Scroll Image Animation Plugin | 19 | 878 | 1,528 | 4k+ | Non-prefixed global variable | ||
| #36 | SendPress Newsletters | 19 | 2,293 | 1,422 | 2k+ | Output is not escaped | ||
| #37 | SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments | 19 | 525 | 1,120 | 90k+ | Non-prefixed global variable | ||
| #38 | WP Email Template | 19 | 344 | 345 | 2k+ | Exception output is not escaped | ||
| #39 | WP Import Export Lite | 19 | 737 | 979 | 40k+ | Non-prefixed global variable | ||
| #40 | WP Directory Kit | 19 | 1,526 | 2,621 | 2k+ | Non-prefixed global variable | ||
| #41 | WPJAM Basic | 19 | 320 | 347 | 4k+ | Output is not escaped | ||
| #42 | WPOSS阿里云对象存储 | 19 | 269 | 315 | 900 | Non-prefixed namespace | ||
| #43 | WPQiNiu七牛云对象存储 | 19 | 138 | 612 | 400 | Non-prefixed global variable | ||
| #44 | AweBooking – Hotel Booking System | 20 | 309 | 514 | 1k+ | Non-prefixed global variable | ||
| #45 | Element Pack – Widgets, Templates & Addons for Elementor | 20 | 10,273 | 359 | 100k+ | Text Domain Mismatch | ||
| #46 | Brizy – Page Builder | 20 | 589 | 720 | 70k+ | Output is not escaped | ||
| #47 | Broadstreet | 20 | 434 | 273 | 700 | Output is not escaped | ||
| #48 | SysBasics Customize My Account for WooCommerce – Live My Account Customizer | 20 | 875 | 911 | 8k+ | Non-prefixed global variable | ||
| #49 | DMCA Protection Badge | 20 | 4,425 | 217 | 1k+ | Output is not escaped | ||
| #50 | Event Espresso – Event Registration & Ticketing Sales | 20 | 12,698 | 2,135 | 600 | Text Domain Mismatch |