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 |
|---|---|---|---|---|---|---|---|---|
| #451 | Read More WP | 23 | 570 | 1,311 | 1k+ | Non-prefixed global variable | ||
| #452 | Real Estate Manager – Property Listing and Agent Management | 23 | 606 | 2,301 | 600 | Non-prefixed global variable | ||
| #453 | Real 3D Flipbook – 3D FlipBook, PDF FlipBook, PDF Viewer, PDF Embedder | 23 | 908 | 1,377 | 10k+ | Non-prefixed global variable | ||
| #454 | Redirection | 23 | 523 | 457 | 100k+ | Non-prefixed global variable | ||
| #455 | Restaurant & Cafe Addon for Elementor | 23 | 889 | 1,326 | 1k+ | Non-prefixed global variable | ||
| #456 | Revive.so – Bulk Rewrite and Republish Blog Posts | 23 | 332 | 228 | 700 | Text Domain Mismatch | ||
| #457 | Robo Gallery – Photo & Image Slider | 23 | 1,291 | 530 | 40k+ | Output is not escaped | ||
| #458 | Manago AI & Leadoo AI | 23 | 644 | 429 | 1k+ | Unsafe printing function | ||
| #459 | Schema | 23 | 1,173 | 245 | 40k+ | Text Domain Mismatch | ||
| #460 | SecuPress with Simple SSL – Simple and Performant Security | 23 | 1,697 | 1,601 | 40k+ | Non-prefixed global variable | ||
| #461 | Secure Custom Fields | 23 | 240 | 1,370 | 80k+ | Non-prefixed function | ||
| #462 | SEO Redirection Plugin – 301 Redirect Manager | 23 | 272 | 727 | 10k+ | Non-prefixed global variable | ||
| #463 | Seraphinite Post .DOCX Source | 23 | 1,156 | 110 | 900 | Output is not escaped | ||
| #464 | Seriously Simple Podcasting | 23 | 548 | 629 | 30k+ | Non-prefixed hook name | ||
| #465 | Shipment Tracker for Woocommerce | 23 | 477 | 576 | 2k+ | Missing Arg Domain | ||
| #466 | Local Google Analytics for WordPress – caches external requests | 23 | 551 | 199 | 3k+ | Output is not escaped | ||
| #467 | Tag, Category, and Taxonomy Manager – Autotagger Automatically Add Terms | 23 | 405 | 869 | 50k+ | Nonce verification recommended | ||
| #468 | Simple URLs – Link Cloaking, Product Displays, and Affiliate Link Management | 23 | 295 | 298 | 4k+ | Non-prefixed global variable | ||
| #469 | Image Optimizer, Resizer and CDN – Sirv | 23 | 616 | 1,004 | 1k+ | Output is not escaped | ||
| #470 | Site Reviews | 23 | 1,626 | 604 | 60k+ | Output is not escaped | ||
| #471 | Slider Hero with Video Background, Animation | 23 | 1,565 | 1,253 | 3k+ | Text Domain Mismatch | ||
| #472 | Slider by 10Web – Responsive Image Slider | 23 | 5,814 | 976 | 10k+ | Output is not escaped | ||
| #473 | Smart Marketing SMS and Newsletters Forms | 23 | 2,232 | 1,015 | 1k+ | Text Domain Mismatch | ||
| #474 | Smart Slider 3 | 23 | 261 | 268 | 800k+ | Non-prefixed global variable | ||
| #475 | SportsPress – Sports Club & League Manager | 23 | 459 | 2,246 | 10k+ | Non-prefixed global variable | ||
| #476 | StreamWeasels Twitch Integration | 23 | 555 | 1,465 | 1k+ | Non-prefixed global variable | ||
| #477 | Strong Testimonials | 23 | 194 | 393 | 90k+ | Nonce verification recommended | ||
| #478 | Super Video player – Fully Customizable Video Player with Playlist | 23 | 1,135 | 1,634 | 2k+ | Non-prefixed global variable | ||
| #479 | teachPress | 23 | 744 | 1,587 | 2k+ | SQL query is not prepared | ||
| #480 | Legal Terms and Conditions Popup for User Login and WooCommerce Checkout | 23 | 524 | 237 | 700 | Output is not escaped | ||
| #481 | The Events Calendar | 23 | 3,509 | 3,850 | 700k+ | Text Domain Mismatch | ||
| #482 | The Pack Elementor addon | 23 | 556 | 1,180 | 2k+ | Non-prefixed global variable | ||
| #483 | The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid | 23 | 105 | 1,013 | 100k+ | Non-prefixed global variable | ||
| #484 | ThemeHunk Customizer | 23 | 3,968 | 582 | 6k+ | Text Domain Mismatch | ||
| #485 | Travelpayouts | 23 | 769 | 110 | 6k+ | Output is not escaped | ||
| #486 | Trinity Audio – Text to Speech AI audio player to convert content into audio | 23 | 119 | 227 | 2k+ | Non-prefixed global variable | ||
| #487 | Directory Listings WordPress plugin – uListing | 23 | 947 | 1,573 | 1k+ | Non-prefixed global variable | ||
| #488 | Ultimate Fields | 23 | 371 | 458 | 600 | Alternative PHP tag found | ||
| #489 | Product Options and Price Calculation Formulas for WooCommerce – Uni CPO | 23 | 2,514 | 1,929 | 1k+ | Output is not escaped | ||
| #490 | User Menus – Nav Menu Visibility | 23 | 531 | 1,298 | 80k+ | Non-prefixed global variable | ||
| #491 | UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP | 23 | 694 | 2,439 | 20k+ | Non-prefixed hook name | ||
| #492 | VK All in One Expansion Unit | 23 | 1,026 | 518 | 100k+ | Output is not escaped | ||
| #493 | W3 Total Cache | 23 | 307 | 678 | 900k+ | Non-prefixed global variable | ||
| #494 | Wallet System for WooCommerce – Digital Wallet, Buy Now Pay Later (BNPL), Instant Cashback, Referral program, Partial & Subscription Payments | 23 | 121 | 1,227 | 2k+ | Non-prefixed global variable | ||
| #495 | Cart PDF for WooCommerce | 23 | 531 | 172 | 1k+ | Exception output is not escaped | ||
| #496 | Product Table & List Builder For WooCommerce | 23 | 1,362 | 2,060 | 10k+ | Non-prefixed global variable | ||
| #497 | Checkout with Zelle on Woocommerce | 23 | 637 | 1,404 | 3k+ | Non-prefixed global variable | ||
| #498 | WHMCS Bridge | 23 | 247 | 472 | 4k+ | Nonce verification recommended | ||
| #499 | Widgets on Pages | 23 | 809 | 1,306 | 20k+ | Non-prefixed global variable | ||
| #500 | Billingo Plus integráció WooCommerce-hez | 23 | 1,119 | 507 | 900 | Text Domain Mismatch |