{"id":399393,"date":"2026-11-07T09:26:32","date_gmt":"2026-11-07T09:26:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/modelgain-php-security-monitor\/"},"modified":"2026-11-07T09:26:20","modified_gmt":"2026-11-07T09:26:20","slug":"modelgain-php-security-monitor","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/modelgain-php-security-monitor\/","author":23559745,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.9","requires_php":"7.4","requires_plugins":null,"header_name":"ModelGain PHP Security Monitor","header_author":"ModelGain","header_description":"Free PHP runtime vulnerability monitoring, conservative advisories and remediation guidance for WordPress.","assets_banners_color":"","last_updated":"2026-11-07 09:26:20","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/modelgain.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":232,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"upaccn","date":"2026-11-07 09:26:20","revision":3789269}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[662,600,41325],"plugin_category":[54],"plugin_contributors":[284600],"plugin_business_model":[],"class_list":["post-399393","plugin","type-plugin","status-publish","hentry","plugin_tags-php","plugin_tags-security","plugin_tags-vulnerabilities","plugin_category-security-and-spam-protection","plugin_contributors-upaccn","plugin_committers-upaccn"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/modelgain-php-security-monitor.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>ModelGain PHP Security Monitor provides conservative PHP vulnerability evidence, optional scheduled checks, and actionable hosting-side remediation guidance. It does not modify PHP or promise continuous protection.<\/p>\n\n<p>Tools &gt; PHP Security shows the PHP_VERSION and PHP_SAPI serving the actual admin request. It never executes shell commands, displays phpinfo, probes exploits or changes PHP configuration.<\/p>\n\n<p>After explicit opt-in, Check now retrieves WPVulnerability's PHP branch advisories and lifecycle. The plugin locally applies both minimum and maximum version predicates; the API returns the entire branch history, not only advisories affecting your exact version.<\/p>\n\n<p>A matching upstream version is labelled potentially affected, never confirmed exploitable. Operating system, SAPI, extensions, application usage, configuration and vendor backports may change applicability. Advisory severity is not a measure of verified server exposure. No matches are not a guarantee of security. App-level code cannot independently verify distributor backports.<\/p>\n\n<p>Lifecycle is provider-reported, separate from vulnerability severity and applicability. There is no bundled offline lifecycle table: without usable evidence it is unknown. Consult https:\/\/www.php.net\/supported-versions.php and your hosting provider for independent support\/build information.<\/p>\n\n<p>The copyable host-support report includes evidence, timestamps and questions about package\/backport status and conditional applicability. It is never sent by the plugin. Remediation belongs with the hosting provider; updating WordPress cannot patch the PHP interpreter. Test compatibility in staging before changing PHP, then recheck the web runtime.<\/p>\n\n<p>Optional monitoring requires separate explicit scheduled-query AND email consent after manual consent. WP-Cron checks approximately every six hours; traffic, disabled cron or failures may delay checks indefinitely. CLI\/phpdbg cron is skipped because it cannot establish the web runtime. The first complete fresh scan establishes a baseline and sends one initial alert when potential vulnerability matches or upstream EOL exist; an initial scan without these findings is silent. Later fresh state changes send event summaries for new potential matches, records no longer matched\/listed (not proof of a fix), and upstream EOL. Unknown\/partial evidence never proves resolution. After 48 hours without fresh evidence, one failure alert is attempted per incident, rearmed only by fresh evidence. A cron outage cannot notify about itself.<\/p>\n\n<p>Emails use core wp_mail and go only to the site administration address. True means accepted by the transport, NOT delivered. Check inbox\/spam and configure WordPress mail independently. Automatic attempts are claimed before sending: failed or interrupted sends are not retried, preventing spam but potentially losing an alert. Use the administrator Test email button (once per minute). Tools &gt; PHP Security shows last run, freshness, next scheduled check and last mail status. Disable monitoring cancels its schedule and email state while retaining manual consent; deactivation disables it too.<\/p>\n\n<p>There is no automatic update\/fix mechanism, telemetry, account, SaaS dependency, paid feature or custom database table. Normal WordPress core update behavior is unchanged.<\/p>\n\n<h3>External services<\/h3>\n\n<p>WPVulnerability manual queries are disabled by default. After explicit opt-in, Check now sends the actual web PHP version to https:\/\/www.wpvulnerability.net\/php\/\/ and exposes the server IP and a generic plugin User-Agent to that provider. This plugin does not send the site URL, administrator details, cookies or credentials. Separate monitoring AND email consent permits scheduled queries to the same fixed endpoint. Core wp_mail sends event\/test notifications only to the site administration address; acceptance does not prove delivery. Activation and page views never initiate requests or emails.<\/p>\n\n<p>Service: https:\/\/www.wpvulnerability.net\/\nAPI documentation: https:\/\/docs.wpvulnerability.com\/\nProvider privacy: https:\/\/www.wpvulnerability.com\/privacy\/<\/p>\n\n<p>Enabling queries alone does not send a request. Withdraw consent to delete this site's stored evidence. Withdrawal also cancels monitoring and removes notification state. Consent is rechecked after HTTP and before sending. No new query or email is initiated after withdrawal is observed; already in-flight HTTP\/mail cannot be recalled.<\/p>\n\n<h3>Cache and limitations<\/h3>\n\n<ul>\n<li>Manual queries and separately opted-in scheduled queries, at most once per minute, with atomic owner-checked request locks.<\/li>\n<li>Eight-second HTTP timeout, no redirects, verified HTTPS via the WordPress safe HTTP API.<\/li>\n<li>Response strictly below 1 MiB, at most 1,000 advisory records.<\/li>\n<li>One non-autoloaded snapshot per site, bound to the exact PHP_VERSION. An upgrade invalidates the old snapshot.<\/li>\n<li>Both retrieval time and provider update time must be less than 24 hours old for fresh evidence. From 24 hours results are stale; at seven days they are expired and unusable. Expired bytes can remain stored until another check, consent withdrawal or uninstall; there is no background cleanup.<\/li>\n<li>HTTP\/JSON failures preserve usable last-good evidence but label it stale, not current. Invalid\/unsupported ranges or incomplete evidence count as unknown, not clean. Malformed envelopes and unsupported runtime strings produce unknown evidence.<\/li>\n<li>Conditional advisory descriptions are displayed for host review, not automatically inferred as confirmed applicable or inapplicable.<\/li>\n<li>Only a stable upstream version is compared. Vendor suffixes do not prove backports; unrecognized\/prerelease versions cannot be checked.<\/li>\n<li>A web request cannot identify every node in a load-balanced fleet or another CLI PHP binary.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate ModelGain PHP Security Monitor from the WordPress plugin directory or a verified plugin ZIP.<\/li>\n<li>Open Tools &gt; PHP Security as an administrator.<\/li>\n<li>Read the privacy disclosure; opt in if you want a manual external check.<\/li>\n<li>Click Check now. Review freshness and unknowns, not just advisory count.<\/li>\n<li>Copy the host-support report for your own review and send it yourself if appropriate.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20fix%20php%20vulnerabilities%3F\"><h3>Does this fix PHP vulnerabilities?<\/h3><\/dt>\n<dd><p>No. It provides conservative version evidence and hosting-side follow-up guidance, not interpreter patching or proof of exploitation.<\/p><\/dd>\n<dt id=\"what%20is%20removed%20on%20uninstall%3F\"><h3>What is removed on uninstall?<\/h3><\/dt>\n<dd><p>Only plugin-owned consent, cached evidence, monitoring\/notification state, cron events and lock options. In multisite these are removed from each site's options; no users, posts or unrelated settings are deleted.<\/p><\/dd>\n<dt id=\"does%20it%20monitor%20continuously%20or%20send%20alerts%3F\"><h3>Does it monitor continuously or send alerts?<\/h3><\/dt>\n<dd><p>Only after separate monitoring and email consent. This is approximate traffic-dependent monitoring, not continuous protection or guaranteed alert delivery.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial free public-release candidate: conservative PHP runtime and lifecycle diagnostics, explicit-consent manual vulnerability checks, and a copyable host-support report.<\/li>\n<li>Optional, separately consented six-hour WP-Cron monitoring with event-based administrator email, duplicate suppression, and monitoring failure state.<\/li>\n<li>Safe handling of unknown, stale and conditional advisories; no automatic PHP modifications or telemetry.<\/li>\n<\/ul>","raw_excerpt":"Free PHP runtime checks, optional scheduled monitoring and conservative email alerts.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/399393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=399393"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/upaccn"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=399393"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=399393"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=399393"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=399393"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=399393"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=399393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}