missing_direct_file_access_protection

Missing direct file access protection

A PHP file in the plugin can be loaded directly instead of through WordPress.

medium weight

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.

Affected Plugins

RankPluginScoreErrorsWarningsInstallsAddedUpdatedTop Issue
#1BulletProof Security05,0484,94920k+Output is not escaped
#2Intercom060716k+Non-prefixed function
#3Live Shopping & Shoppable Videos For WooCommerce078175400Non-prefixed global variable
#4Plugin Check (PCP)012813210k+Exception output is not escaped
#5Themify Builder95,2072,1255k+Text Domain Mismatch
#6JetBackup – Backup, Restore & Migrate101,563149200k+Exception output is not escaped
#7Easy WP SMTP – WordPress SMTP and Email Logs: Gmail SMTP, Office 365, Outlook, Custom SMTP, and more1545166500k+Database parameter is not escaped
#8Visual Composer Website Builder168232040k+Non-prefixed global variable
#9MDTF – Meta Data and Taxonomies Filter161,5501,9561k+Non-prefixed global variable
#10AnyComment174454495k+Output is not escaped
#11Efí Bank17886553400Exception output is not escaped
#12wpForo Forum174,0543,03320k+Unsafe printing function
#13WPtouch – Make your WordPress Website Mobile-Friendly171,46632550k+Text Domain Mismatch
#14Prime Slider Addons for Elementor183,500229100k+Text Domain Mismatch
#15JetFormBuilder — Dynamic Blocks Form Builder182,0931,59480k+Text Domain Mismatch
#16Pagopar – WooCommerce Gateway185301,215400Non-prefixed global variable
#17Podlove Podcast Publisher182,3331,4353k+Output is not escaped
#18Property Hive181,9576,0273k+Missing nonce verification
#19Realtyna Organic IDX plugin + WPL Real Estate189303,6362k+Non-prefixed global variable
#20RestroPress – Online Food Ordering System185213,0821k+Non-prefixed global variable
#21Shopping Cart & eCommerce Store185,54117,3973k+Non-prefixed global variable
#22WPPizza – A Restaurant Plugin184,6892,7031k+Text Domain Mismatch
#23Block Slider – Responsive Image Slider, Video Slider & Post Slider195551,2913k+Non-prefixed global variable
#24Download Monitor194241,36280k+Non-prefixed hook name
#25Advanced File Manager – Ultimate File Manager for WordPress And Document Library Solution191,218901100k+Exception output is not escaped
#26Go Fetch Jobs (for WP Job Manager)191,4101,741700Non-prefixed global variable
#27AI Infographic Maker191,517599600Output is not escaped
#28Leaflet Maps Marker (Google Maps, OpenStreetMap, Bing Maps)193,2753,22810k+Output is not escaped
#29Matomo Analytics – Powerful, Privacy-First Insights for WordPress191,911877100k+Exception output is not escaped
#30Netgsm193343081k+Setting is missing a sanitization callback
#31Verified Reviews (Avis Vérifiés)196711,136700Non-prefixed global variable
#32Razorpay Payment Button Plugin19486982k+Exception output is not escaped
#33Really Simple Security – Simple and Performant Security (formerly Really Simple SSL)195403893m+Missing Translators Comment
#34Membership Plugin – Kadence Memberships195,0822,9829k+Text Domain Mismatch
#35Scrollsequence – Cinematic Scroll Image Animation Plugin198781,5284k+Non-prefixed global variable
#36SendPress Newsletters192,2931,4222k+Output is not escaped
#37SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments195251,12090k+Non-prefixed global variable
#38WP Email Template193443452k+Exception output is not escaped
#39WP Import Export Lite1973797940k+Non-prefixed global variable
#40WP Directory Kit191,5262,6212k+Non-prefixed global variable
#41WPJAM Basic193203474k+Output is not escaped
#42WPOSS阿里云对象存储19269315900Non-prefixed namespace
#43WPQiNiu七牛云对象存储19138612400Non-prefixed global variable
#44AweBooking – Hotel Booking System203095141k+Non-prefixed global variable
#45Element Pack – Widgets, Templates & Addons for Elementor2010,273359100k+Text Domain Mismatch
#46Brizy – Page Builder2058972070k+Output is not escaped
#47Broadstreet20434273700Output is not escaped
#48SysBasics Customize My Account for WooCommerce – Live My Account Customizer208759118k+Non-prefixed global variable
#49DMCA Protection Badge204,4252171k+Output is not escaped
#50Event Espresso – Event Registration & Ticketing Sales2012,6982,135600Text Domain Mismatch