{"id":292510,"date":"2026-04-03T17:59:31","date_gmt":"2026-04-03T17:59:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/patchwork\/"},"modified":"2026-04-05T23:13:10","modified_gmt":"2026-04-05T23:13:10","slug":"squish-site-patrol","status":"publish","type":"plugin","link":"https:\/\/bo.wordpress.org\/plugins\/squish-site-patrol\/","author":23469644,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.4.0","stable_tag":"1.4.0","tested":"6.9.4","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Squish Site Patrol","header_author":"Casey Payne","header_description":"Page speed, security, and malware scanning for WordPress.","assets_banners_color":"0d0d1a","last_updated":"2026-04-05 23:13:10","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/squish.co","header_author_uri":"","rating":5,"author_block_rating":0,"active_installs":0,"downloads":138,"num_ratings":1,"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":"squishit","date":"2026-04-03 18:03:41"},"1.1.0":{"tag":"1.1.0","author":"squishit","date":"2026-04-03 22:04:20"},"1.3.0":{"tag":"1.3.0","author":"squishit","date":"2026-04-05 17:18:37"},"1.4.0":{"tag":"1.4.0","author":"squishit","date":"2026-04-05 23:13:10"}},"upgrade_notice":{"1.3.0":"<p>Major release adding 2FA, login protection with reCAPTCHA and Geo IP blocking, weekly email reports, and a redesigned dashboard. Recommended for all users.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3498415,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3498415,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3498516,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.3.0","1.4.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3500001,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3500001,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3500001,"resolution":"3","location":"assets","locale":""}},"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[15756,55021,600,1909,139069],"plugin_category":[54],"plugin_contributors":[259384],"plugin_business_model":[],"class_list":["post-292510","plugin","type-plugin","status-publish","hentry","plugin_tags-login-protection","plugin_tags-malware-scanner","plugin_tags-security","plugin_tags-two-factor-authentication","plugin_tags-vulnerability-scanner","plugin_category-security-and-spam-protection","plugin_contributors-squishit","plugin_committers-squishit"],"banners":{"banner":"https:\/\/ps.w.org\/squish-site-patrol\/assets\/banner-772x250.png?rev=3498516","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/squish-site-patrol\/assets\/icon-128x128.png?rev=3498415","icon_2x":"https:\/\/ps.w.org\/squish-site-patrol\/assets\/icon-256x256.png?rev=3498415","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/squish-site-patrol\/assets\/screenshot-1.png?rev=3500001","caption":""},{"src":"https:\/\/ps.w.org\/squish-site-patrol\/assets\/screenshot-2.png?rev=3500001","caption":""},{"src":"https:\/\/ps.w.org\/squish-site-patrol\/assets\/screenshot-3.png?rev=3500001","caption":""}],"raw_content":"<!--section=description-->\n<p>Squish Site Patrol gives your WordPress site a complete health check \u2014 security hardening, malware scanning, login protection, and page speed in a single clean dashboard.<\/p>\n\n<p><strong>Two-Factor Authentication (2FA)<\/strong>\n* TOTP-based 2FA with QR code setup (Google Authenticator, Authy, etc.)\n* Custom branded interstitial login page \u2014 replaces the default wp-login.php flow\n* Per-user 2FA enrollment with recovery options<\/p>\n\n<p><strong>Login Protection<\/strong>\n* reCAPTCHA v3 on the login page (free tier, no checkbox required)\n* Geo IP country blocking \u2014 restrict logins by country via ipapi.co\n* Failed login attempt monitoring and alerts (Patched)\n* Detects predictable \"admin\" username<\/p>\n\n<p><strong>Security Checks<\/strong>\n* WordPress core version check\n* Plugin update status \u2014 flags outdated plugins\n* SSL \/ HTTPS detection\n* File editor status check (wp-admin editor)\n* wp-config.php permissions check (Patched)\n* XML-RPC status check (Patched)\n* Debug mode detection (Patched)\n* Admin account audit \u2014 flags inactive admin accounts (Patched)\n* Database prefix check \u2014 flags default wp_ prefix (Patched)\n* Directory listing detection (Patched)<\/p>\n\n<p><strong>Malware Scanner<\/strong>\n* Verifies all 3,000+ WordPress core files against official checksums\n* Detects PHP files hidden in your uploads folder\n* Scans for dangerous file types (.exe, .sh, .bat) in uploads\n* User enumeration vulnerability check\n* Flags any modified core files\n* Real-time file change monitoring with baseline comparison (Patched)<\/p>\n\n<p><strong>Email Breach Detection<\/strong>\n* Checks admin email addresses against HaveIBeenPwned (Patched)\n* Alerts you if any admin account appears in a known breach<\/p>\n\n<p><strong>Page Speed &amp; Core Web Vitals<\/strong>\n* Live Google PageSpeed Insights score\n* Core Web Vitals \u2014 LCP, FCP, and CLS\n* Mobile performance scoring\n* Scan any public URL\n* Inline metric explanations<\/p>\n\n<p><strong>Reporting<\/strong>\n* Weekly HTML email reports with a full scan summary (Patched)\n* Scheduled automatic daily scans (Patched)\n* Email alerts when issues are detected (Patched)\n* SSL certificate expiry alerts (Patched)<\/p>\n\n<p><strong>Dashboard &amp; UX<\/strong>\n* Categorized check panels \u2014 Login, Server, and Files (collapsible)\n* Issues-only toggle \u2014 hide passing checks, focus on what needs fixing\n* Rescan button with toast notification (no page reload)\n* Card-based Settings UI with masked API keys\n* Dark mode toggle\n* Scan spinner and auto-scan status badge\n* Inline metric tooltips<\/p>\n\n<p><strong>Performance<\/strong>\n* Aggressive transient caching (12\u201324hr TTL) across all check classes\n* Zero front-end footprint \u2014 all scans run in wp-admin only<\/p>\n\n\n\n<h4>Squish Site Patrol Patched \u2014 $15\/mo<\/h4>\n\n<p>Upgrade to Patched for automatic monitoring and advanced protection:<\/p>\n\n<ul>\n<li>Scheduled automatic daily scans<\/li>\n<li>Weekly HTML email reports<\/li>\n<li>Email alerts when issues are found<\/li>\n<li>Failed login attempt monitoring<\/li>\n<li>SSL certificate expiry alerts<\/li>\n<li>Real-time file change monitoring with baseline comparison<\/li>\n<li>Reset file monitoring baseline after legitimate updates<\/li>\n<li>wp-config.php permissions check<\/li>\n<li>XML-RPC status check<\/li>\n<li>Debug mode detection<\/li>\n<li>Admin account audit \u2014 flags inactive admin accounts<\/li>\n<li>Database prefix check \u2014 flags default wp_ prefix<\/li>\n<li>Directory listing detection<\/li>\n<li>Email breach check via HaveIBeenPwned<\/li>\n<li>Up to 3 sites<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<h4>Google PageSpeed Insights API<\/h4>\n\n<p>Used to analyze page speed and Core Web Vitals for any URL entered by the user. Data sent: the URL being scanned. This call is only made when the user clicks \"Run scan\".\n* Service: https:\/\/developers.google.com\/speed\/docs\/insights\/v5\/about\n* Privacy: https:\/\/policies.google.com\/privacy\n* Terms: https:\/\/developers.google.com\/terms<\/p>\n\n<h4>WordPress.org Checksums API<\/h4>\n\n<p>Used to verify the integrity of WordPress core files by comparing them against official checksums. No user data is sent \u2014 only the WordPress version number and locale.\n* Service: https:\/\/api.wordpress.org\/core\/checksums\/1.0\/\n* Privacy: https:\/\/wordpress.org\/about\/privacy\/<\/p>\n\n<h4>ipapi.co<\/h4>\n\n<p>Used to determine the country of origin for login attempts when Geo IP country blocking is enabled. Data sent: the visitor's IP address. This check only runs on the login page when the feature is active.\n* Service: https:\/\/ipapi.co\n* Privacy: https:\/\/ipapi.co\/privacy\/<\/p>\n\n<h4>HaveIBeenPwned API (Patched only)<\/h4>\n\n<p>Used to check if admin email addresses appear in known data breach databases. Requires a valid HIBP API key configured in settings.\n* Service: https:\/\/haveibeenpwned.com\/API\/v3\n* Privacy: https:\/\/haveibeenpwned.com\/Privacy\n* Terms: https:\/\/haveibeenpwned.com\/API\/v3#license<\/p>\n\n<h4>Freemius<\/h4>\n\n<p>Used to manage the Patched premium subscription, licensing, and payments. Data sent upon upgrade: site URL, WordPress version, plugin version, and user email if the user opts in.\n* Service: https:\/\/freemius.com\n* Privacy: https:\/\/freemius.com\/privacy\/\n* Terms: https:\/\/freemius.com\/terms\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/squish-site-patrol<\/code><\/li>\n<li>Activate the plugin through the Plugins screen in WordPress<\/li>\n<li>Go to <strong>Squish Site Patrol \u2192 Settings<\/strong> and enter your Google API key<\/li>\n<li>Click <strong>Squish Site Patrol<\/strong> in the sidebar and run your first scan<\/li>\n<\/ol>\n\n<h4>Where do I get a Google API key?<\/h4>\n\n<p>Go to console.cloud.google.com, create a project, enable the PageSpeed Insights API, and generate an API key under Credentials. It's free.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20slow%20down%20my%20site%3F\"><h3>Does this plugin slow down my site?<\/h3><\/dt>\n<dd><p>No. Scans only run when you manually click \"Run scan\" in the admin panel. Nothing runs on the front end.<\/p><\/dd>\n<dt id=\"is%20the%20malware%20scan%20automatic%3F\"><h3>Is the malware scan automatic?<\/h3><\/dt>\n<dd><p>In the free version, scans run on demand. Scheduled automatic daily scanning is available in Squish Site Patrol Patched.<\/p><\/dd>\n<dt id=\"what%20does%20the%20malware%20scanner%20actually%20check%3F\"><h3>What does the malware scanner actually check?<\/h3><\/dt>\n<dd><p>It compares every WordPress core file on your server against the official checksums published by WordPress.org. Any file that does not match gets flagged. It also scans your uploads folder for PHP files, dangerous file types, and checks for user enumeration vulnerabilities.<\/p><\/dd>\n<dt id=\"what%20is%20file%20change%20monitoring%3F\"><h3>What is file change monitoring?<\/h3><\/dt>\n<dd><p>Patched users get a baseline snapshot of all plugin and theme files. On every scheduled scan, Squish Site Patrol compares current files against that baseline and alerts you to any unexpected changes \u2014 modified, added, or removed files.<\/p><\/dd>\n<dt id=\"how%20does%202fa%20work%3F\"><h3>How does 2FA work?<\/h3><\/dt>\n<dd><p>When enabled, Squish Site Patrol adds a TOTP-based second factor to your WordPress login. After entering your password, you'll see a custom interstitial page prompting for your authenticator code. Works with any TOTP app including Google Authenticator and Authy.<\/p><\/dd>\n<dt id=\"how%20does%20geo%20ip%20country%20blocking%20work%3F\"><h3>How does Geo IP country blocking work?<\/h3><\/dt>\n<dd><p>When enabled in Settings, login attempts from countries outside your allowed list are blocked before they reach wp-login.php. Country detection is handled via ipapi.co. No user data is stored.<\/p><\/dd>\n<dt id=\"what%20is%20the%20issues-only%20toggle%3F\"><h3>What is the issues-only toggle?<\/h3><\/dt>\n<dd><p>A dashboard control that hides all passing checks and shows only the items that need attention \u2014 useful on sites with many checks configured.<\/p><\/dd>\n<dt id=\"do%20you%20offer%20refunds%3F\"><h3>Do you offer refunds?<\/h3><\/dt>\n<dd><p>All sales are final. We recommend trying the free version thoroughly before upgrading to Patched.<\/p><\/dd>\n<dt id=\"what%20is%20squish%20site%20patrol%20patched%3F\"><h3>What is Squish Site Patrol Patched?<\/h3><\/dt>\n<dd><p>Patched is the paid tier of Squish Site Patrol at $15\/month. It adds automatic scheduled scans, weekly HTML email reports, login monitoring, SSL expiry alerts, file change monitoring, breach detection, and much more.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Added audit log \u2014 tracks logins, plugin installs, settings changes, scans, 2FA events, and baseline resets<\/li>\n<li>Added magic link login \u2014 send a one-time signed login link to your admin email (Patched)<\/li>\n<li>Redesigned dashboard \u2014 Patched hardening checks moved to new Hardening tab in right panel<\/li>\n<li>Improved issue count badges \u2014 Security panel shows free check issues only, Scans &amp; hardening panel shows scan\/hardening issues separately<\/li>\n<li>Added Issues only toggle to Scans &amp; hardening panel<\/li>\n<li>Added Recent activity strip to dashboard showing last 5 audit events<\/li>\n<li>Added Files tab to Scans panel with file change monitoring checks<\/li>\n<li>Improved UI \u2014 flat section heads replace collapsible accordion, score cards hidden by default before first scan<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added 2FA via TOTP with QR code setup (Google Authenticator, Authy compatible)<\/li>\n<li>Added custom branded interstitial login page \u2014 replaces default wp-login.php flow<\/li>\n<li>Added reCAPTCHA v3 on login page (moved to free tier, no checkbox required)<\/li>\n<li>Added Geo IP country blocking via ipapi.co<\/li>\n<li>Added weekly HTML email reports (Patched)<\/li>\n<li>Added aggressive transient caching (12\u201324hr TTL) across security, scanner, breach, and vulnerability check classes<\/li>\n<li>Added rescan button with toast notification (no page reload required)<\/li>\n<li>Added categorized check panels \u2014 Login, Server, and Files (collapsible)<\/li>\n<li>Added issues-only toggle to hide passing checks<\/li>\n<li>Redesigned Settings UI with card-based layout and masked API keys<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added scheduled automatic daily scans (Patched)<\/li>\n<li>Added email scan reports when issues are detected (Patched)<\/li>\n<li>Added real-time file change monitoring with baseline comparison (Patched)<\/li>\n<li>Added SSL certificate expiry alerts (Patched)<\/li>\n<li>Added wp-config.php permissions check (Patched)<\/li>\n<li>Added failed login attempt monitoring (Patched)<\/li>\n<li>Added debug mode detection (Patched)<\/li>\n<li>Added XML-RPC status check (Patched)<\/li>\n<li>Added admin account audit for inactive admins (Patched)<\/li>\n<li>Added database prefix check (Patched)<\/li>\n<li>Added directory listing detection (Patched)<\/li>\n<li>Added email breach check via HaveIBeenPwned (Patched)<\/li>\n<li>Added reset file monitoring baseline button (Patched)<\/li>\n<li>Added suspicious file type detection in uploads (.exe, .sh, .bat)<\/li>\n<li>Added user enumeration vulnerability check<\/li>\n<li>Added dark mode toggle with localStorage persistence<\/li>\n<li>Added scanning spinner on Run scan button<\/li>\n<li>Added auto-scan status badge in scan bar<\/li>\n<li>Added inline metric tooltips (Performance, LCP, CLS, FCP)<\/li>\n<li>Score cards now show before a scan with placeholder values<\/li>\n<li>Improved dashboard layout and branding<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>PageSpeed Insights integration with Core Web Vitals<\/li>\n<li>Security checker with 5 live checks<\/li>\n<li>WordPress core file integrity scanner<\/li>\n<li>PHP-in-uploads detection<\/li>\n<\/ul>","raw_excerpt":"Complete WordPress security, malware scanning, login protection, and performance monitoring in one clean dashboard.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/292510","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=292510"}],"author":[{"embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/squishit"}],"wp:attachment":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=292510"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=292510"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=292510"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=292510"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=292510"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=292510"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}