{"id":393296,"date":"2026-11-08T19:55:01","date_gmt":"2026-11-08T19:55:01","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/itps-shield\/"},"modified":"2026-11-08T19:54:28","modified_gmt":"2026-11-08T19:54:28","slug":"itps-shield","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/itps-shield\/","author":15161823,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.3","stable_tag":"1.5.3","tested":"7.1.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"ITPS Shield","header_author":"IT Pro Services LLC","header_description":"Layered hardening for WordPress: force HTTPS, custom login URL, brute-force lockout, request firewall, login honeypot, comment \/ sign-up \/ contact-form spam protection, disable comments, idle logout, admin-change alerts, XML-RPC and user-enumeration blocking, security headers, file-edit lock, upload PHP blocking, core file integrity scan and a security audit.","assets_banners_color":"204367","last_updated":"2026-11-08 19:54:28","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/www.it-ps.net","rating":0,"author_block_rating":0,"active_installs":0,"downloads":108,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.5.3":{"tag":"1.5.3","author":"ahmedadmin","date":"2026-11-08 19:54:28","revision":3791447}},"upgrade_notice":{"1.5.3":"<p>The custom login address no longer rewrites external URLs or query parameters that mention wp-login.php.<\/p>","1.5.2":"<p>Stricter IP allow-list validation and safer .htaccess handling. The automatic deletion of readme.html, license.txt and wp-config-sample.php was removed.<\/p>","1.5.1":"<p>Security hardening of request input handling. Recommended for all users.<\/p>","1.5.0":"<p>The &quot;Protected by ITPS Shield&quot; page is now off by default. If you used it, switch it back on in Settings \u2192 ITPS Shield \u2192 Hide WordPress.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3791446,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3791446,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3791446,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3791446,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3791446,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.5.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3791446,"resolution":"1","location":"assets","locale":"","width":1600,"height":1818},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3791446,"resolution":"2","location":"assets","locale":"","width":1600,"height":2194},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3791446,"resolution":"3","location":"assets","locale":"","width":1600,"height":1000},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3791446,"resolution":"4","location":"assets","locale":"","width":1600,"height":458},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3791446,"resolution":"5","location":"assets","locale":"","width":1600,"height":1053},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3791446,"resolution":"6","location":"assets","locale":"","width":1600,"height":1398}},"screenshots":{"1":"Security Audit with score, Harden now and per-check Fix buttons.","2":"Settings: HTTPS, login address, login protection and spam protection.","3":"The optional \"Protected by ITPS Shield\" page.","4":"Locked IPs: brute-force lockouts with one-click unlock.","5":"Activity log of blocked attacks, login lockouts and spam.","6":"The Security Audit after one click on \"Harden now\"."}},"plugin_section":[],"plugin_tags":[1174,1229,600,599,1536],"plugin_category":[54],"plugin_contributors":[280042],"plugin_business_model":[],"class_list":["post-393296","plugin","type-plugin","status-publish","hentry","plugin_tags-firewall","plugin_tags-login-security","plugin_tags-security","plugin_tags-spam","plugin_tags-ssl","plugin_category-security-and-spam-protection","plugin_contributors-ahmedadmin","plugin_committers-ahmedadmin"],"banners":{"banner":"https:\/\/ps.w.org\/itps-shield\/assets\/banner-772x250.png?rev=3791446","banner_2x":"https:\/\/ps.w.org\/itps-shield\/assets\/banner-1544x500.png?rev=3791446","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/itps-shield\/assets\/icon.svg?rev=3791446","icon":"https:\/\/ps.w.org\/itps-shield\/assets\/icon.svg?rev=3791446","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/itps-shield\/assets\/screenshot-1.png?rev=3791446","caption":"Security Audit with score, Harden now and per-check Fix buttons."},{"src":"https:\/\/ps.w.org\/itps-shield\/assets\/screenshot-2.png?rev=3791446","caption":"Settings: HTTPS, login address, login protection and spam protection."},{"src":"https:\/\/ps.w.org\/itps-shield\/assets\/screenshot-3.png?rev=3791446","caption":"The optional \"Protected by ITPS Shield\" page."},{"src":"https:\/\/ps.w.org\/itps-shield\/assets\/screenshot-4.png?rev=3791446","caption":"Locked IPs: brute-force lockouts with one-click unlock."},{"src":"https:\/\/ps.w.org\/itps-shield\/assets\/screenshot-5.png?rev=3791446","caption":"Activity log of blocked attacks, login lockouts and spam."},{"src":"https:\/\/ps.w.org\/itps-shield\/assets\/screenshot-6.png?rev=3791446","caption":"The Security Audit after one click on \"Harden now\"."}],"raw_content":"<!--section=description-->\n<p>ITPS Shield locks down a WordPress site in a few clicks. Open <strong>Settings \u2192 ITPS Shield \u2192 Security Audit<\/strong>, press <strong>Harden now<\/strong>, and the plugin switches on every protection that is safe for any site. Server (.htaccess) rules are only written when you ask for them, and each one is tested and rolled back automatically if your server rejects it. The plugin never edits or deletes WordPress core files; the audit tells you what to fix by hand.<\/p>\n\n<h4>HTTPS \/ SSL<\/h4>\n\n<ul>\n<li>Force HTTPS: every http:\/\/ request is redirected to https:\/\/, the admin and login use HTTPS, cookies are marked secure and browsers are told to upgrade insecure requests.<\/li>\n<li>The SSL certificate is tested before Force HTTPS can be switched on, so you can't lock the site into a broken HTTPS.<\/li>\n<li>Optional mixed-content fixer and HSTS.<\/li>\n<\/ul>\n\n<h4>Login protection<\/h4>\n\n<ul>\n<li>Custom login address: move wp-login.php to an address you choose. \/wp-login.php and \/wp-admin\/ show \"Not Found\" to logged-out visitors.<\/li>\n<li>Brute-force lockout per IP, applied after the password check so a correct password can't bypass it, with email alerts and an unlock screen.<\/li>\n<li>Login honeypot and real-browser check that stop scripted brute-force tools.<\/li>\n<li>Generic login errors, strong-password enforcement, optional idle logout and maximum session length.<\/li>\n<li>Email alerts when any account becomes an Administrator, or an administrator logs in from a new IP.<\/li>\n<\/ul>\n\n<h4>Spam protection without CAPTCHA<\/h4>\n\n<ul>\n<li>Comments, WordPress and WooCommerce sign-ups, and contact forms: Contact Form 7, WPForms, Gravity Forms, Elementor Pro Forms, Fluent Forms, Formidable Forms and Ninja Forms.<\/li>\n<li>Invisible honeypot, real-browser check and minimum fill time. Real visitors see nothing.<\/li>\n<li>Sign-ups from disposable email addresses are refused; comments with too many links go to spam.<\/li>\n<li>Disable comments site-wide in one click (comments, pingbacks, admin menus, comment blocks, comment feeds and the comments REST API).<\/li>\n<\/ul>\n\n<h4>Firewall and attack surface<\/h4>\n\n<ul>\n<li>Request firewall for SQL injection, XSS, path traversal, stream wrappers, code injection, null bytes and probes for .env, .git and wp-config.php, plus vulnerability-scanner user agents.<\/li>\n<li>XML-RPC and pingbacks disabled, user enumeration blocked (?author=N, REST \/wp\/v2\/users, oEmbed, user sitemap).<\/li>\n<li>Optional REST API restriction for logged-out visitors with an allow-list.<\/li>\n<li>Theme\/plugin file editor disabled; optional block on installing or uploading plugins and themes from the dashboard (updates still work).<\/li>\n<\/ul>\n\n<h4>Hide WordPress<\/h4>\n\n<ul>\n<li>Removes the generator tag, WordPress links and headers and the emoji script.<\/li>\n<li>Replaces ?ver= on every core, theme and plugin file with a hash, so versions can't be read but caches still refresh after updates.<\/li>\n<li>Hides the plugin list in \/wp-json\/ and blocks plugin readme and changelog files, logs and backups in wp-content.<\/li>\n<li>Your own site icon and name on the login page, and no WordPress logo as a fallback favicon.<\/li>\n<li>Optional \"Protected by ITPS Shield\" page for blocked visitors (off by default; it includes a credit link).<\/li>\n<\/ul>\n\n<h4>Server hardening<\/h4>\n\n<ul>\n<li>Security headers (nosniff, frame protection, referrer and permissions policy).<\/li>\n<li>No PHP execution in uploads; optional root .htaccess hardening that also blocks readme.html, license.txt and wp-config-sample.php.<\/li>\n<li>Every .htaccess file is tested with a real request after it is written and removed again if the server answers with an error.<\/li>\n<li>The audit checks wp-config.php permissions and version-revealing files and explains how to fix them.<\/li>\n<\/ul>\n\n<h4>Audit and monitoring<\/h4>\n\n<ul>\n<li>Security Audit with a score, per-check Fix buttons and a one-click Harden now.<\/li>\n<li>Core file integrity scan against the official checksums from WordPress.org, plus detection of unknown PHP files in wp-admin and wp-includes.<\/li>\n<li>Activity log, locked-IP list and IP allow-list (IPv4 \/ IPv6 addresses and IPv4 ranges).<\/li>\n<\/ul>\n\n<p>ITPS Shield has no external service, no account and no tracking. The only outside request is the core file scan, which downloads WordPress's official checksums from api.wordpress.org when you run it.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install through Plugins \u2192 Add New, or upload the itps-shield folder to \/wp-content\/plugins\/.<\/li>\n<li>Activate the plugin. Activation only saves the default settings; it does not write any files.<\/li>\n<li>Go to Settings \u2192 ITPS Shield and add your own IP address to the allow-list.<\/li>\n<li>If the site is behind Cloudflare or a load balancer, enable \"Trust proxy\". Otherwise leave it off.<\/li>\n<li>Open the Security Audit tab and press \"Harden now\" (or \"Install server rules\" in the notice) to install the .htaccess rules.<\/li>\n<li>Optional: set a custom login address in Settings and bookmark it.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"i%20forgot%20my%20custom%20login%20address\"><h3>I forgot my custom login address<\/h3><\/dt>\n<dd><p>Add <code>define( 'ITPS_SHIELD_DISABLE_LOGIN_URL', true );<\/code> to wp-config.php, log in at \/wp-login.php, check the address in Settings \u2192 ITPS Shield, then remove the line. The address is also emailed to the site admin whenever it changes.<\/p><\/dd>\n<dt id=\"my%20login%20says%20%22please%20enable%20javascript%22\"><h3>My login says \"please enable JavaScript\"<\/h3><\/dt>\n<dd><p>The real-browser check needs JavaScript. Enable it, or add <code>define( 'ITPS_SHIELD_DISABLE_JS_CHECK', true );<\/code> to wp-config.php.<\/p><\/dd>\n<dt id=\"i%20locked%20myself%20out%20with%20too%20many%20attempts\"><h3>I locked myself out with too many attempts<\/h3><\/dt>\n<dd><p>Wait for the lockout to end, or log in from an IP on the allow-list. As a last resort, rename wp-content\/plugins\/itps-shield by FTP or your hosting file manager; the plugin deactivates.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20nginx%3F\"><h3>Does it work on Nginx?<\/h3><\/dt>\n<dd><p>Yes. Everything except the .htaccess rules works on any server. On Nginx the Security Audit shows the equivalent server rules to add.<\/p><\/dd>\n<dt id=\"does%20it%20slow%20the%20site%20down%3F\"><h3>Does it slow the site down?<\/h3><\/dt>\n<dd><p>No. The checks are lightweight, run inside WordPress and make no external requests. The spam trap is a small inline script only for logged-out visitors.<\/p><\/dd>\n<dt id=\"will%20the%20spam%20protection%20block%20real%20visitors%3F\"><h3>Will the spam protection block real visitors?<\/h3><\/dt>\n<dd><p>Real visitors never see it. A submission is only refused when the hidden honeypot field is filled, the form was sent without a real browser, or it was sent within a few seconds of opening the page (adjustable).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.3<\/h4>\n\n<ul>\n<li>Custom login address: links and redirects are only rewritten when they point to this site's own wp-login.php (same host, same path). URLs on other sites, and URLs that only mention wp-login.php in a query parameter, are no longer changed.<\/li>\n<li>Stricter URL matching in the mixed-content fixer (only this site's exact host), the sub-directory check and the REST API allow-list (whole namespaces only).<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>Activation no longer writes any .htaccess file. The rules are installed from the plugin screen, and every location (site root, wp-content, uploads) is tested with a real request and rolled back if the server answers with HTTP 500.<\/li>\n<li>IP allow-list: entries are validated strictly. IPv4 ranges need a whole-number prefix from 1 to 32; malformed ranges, \/0 and other invalid entries are rejected with a notice and ignored if already saved.<\/li>\n<li>The plugin no longer deletes readme.html, license.txt or wp-config-sample.php and no longer changes wp-config.php permissions. The audit explains how to do it, and \"Harden root .htaccess\" can block those files instead.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Security: every value read from the request ($_SERVER, $_POST, $_GET) is now sanitized as it is read; firewall evidence is stored through esc_url_raw().<\/li>\n<li>The mixed-content fixer now uses the WordPress 6.9+ template enhancement output buffer instead of opening its own output buffer; older WordPress versions use content, block, widget and image URL filters.<\/li>\n<li>Force HTTPS redirects now go through wp_safe_redirect().<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Prepared for the WordPress.org plugin directory: scripts and styles are now enqueued, WordPress file APIs are used for file changes, and the \"Protected by ITPS Shield\" page (with its credit link) is now opt-in.<\/li>\n<li>Tested with WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Fix: the protection page uses the ITPS shield as its tab icon; \/favicon.ico no longer falls back to the WordPress logo.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>New: comment, sign-up and contact-form spam protection, disposable email blocking, comment link limit.<\/li>\n<li>New: disable comments site-wide.<\/li>\n<li>New: login real-browser check.<\/li>\n<li>New: \"Protected by ITPS Shield\" page for blocked visitors.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New \"Hide WordPress\" options, block plugin\/theme installs, maximum session length.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: one-click Harden now, security score and per-check Fix buttons.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: Force HTTPS, custom login URL, login honeypot, idle logout, admin alerts, REST restriction, core file scan.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"All-in-one WordPress hardening: force HTTPS, custom login URL, brute-force lockout, firewall, spam protection without CAPTCHA and one-click hardening.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/393296","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=393296"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ahmedadmin"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=393296"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=393296"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=393296"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=393296"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=393296"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=393296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}