{"id":286657,"date":"2026-03-24T05:43:30","date_gmt":"2026-03-24T05:43:30","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/maskmyadmin\/"},"modified":"2026-03-27T17:16:00","modified_gmt":"2026-03-27T17:16:00","slug":"maskmyadmin","status":"publish","type":"plugin","link":"https:\/\/kea.wordpress.org\/plugins\/maskmyadmin\/","author":23460732,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2.3","stable_tag":"1.2.3","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Mask My Admin - WordPress Login Security & URL Protection","header_author":"Dropals.com","header_description":"Advanced admin security with URL masking and IP protection","assets_banners_color":"7c76f3","last_updated":"2026-03-27 17:16:00","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/dropals.com\/","header_plugin_uri":"https:\/\/dropals.com\/mask-my-admin","header_author_uri":"https:\/\/dropals.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":222,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"1.2.0":{"tag":"1.2.0","author":"dropalshosting","date":"2026-03-24 05:49:34"},"1.2.1":{"tag":"1.2.1","author":"dropalshosting","date":"2026-03-25 05:24:00"},"1.2.2":{"tag":"1.2.2","author":"dropalshosting","date":"2026-03-27 04:40:45"},"1.2.3":{"tag":"1.2.3","author":"dropalshosting","date":"2026-03-27 17:16:00"}},"upgrade_notice":{"1.2.0":"<p>Critical security update. Fixes IP spoofing vulnerability, removes debug backdoor, and adds activity logging, email notifications, WP-CLI support, and progressive brute-force protection.<\/p>","1.2.1":"<ul>\n<li>Updated plugin title for improved clarity and SEO.<\/li>\n<\/ul>","1.2.2":"<ul>\n<li>Fixed character encoding issue in plugin title.<\/li>\n<\/ul>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3490515,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3490515,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3490515,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3490515,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.0","1.2.1","1.2.2","1.2.3"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3489631,"resolution":"1","location":"assets","locale":""},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3489631,"resolution":"2","location":"assets","locale":""},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3489631,"resolution":"3","location":"assets","locale":""},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3489631,"resolution":"4","location":"assets","locale":""},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3489631,"resolution":"5","location":"assets","locale":""}},"screenshots":{"1":"Settings screen to configure your custom login URL and redirection","2":"IP whitelist management with proxy\/CDN configuration","3":"Activity log showing login attempts and settings changes"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[3691,35063,1229,1228,258483],"plugin_category":[],"plugin_contributors":[258484],"plugin_business_model":[],"class_list":["post-286657","plugin","type-plugin","status-publish","hentry","plugin_tags-custom-login","plugin_tags-hide-wp-admin","plugin_tags-login-security","plugin_tags-secure-login","plugin_tags-whitelist-ip","plugin_contributors-dropalshosting","plugin_committers-dropalshosting"],"banners":{"banner":"https:\/\/ps.w.org\/maskmyadmin\/assets\/banner-772x250.png?rev=3490515","banner_2x":"https:\/\/ps.w.org\/maskmyadmin\/assets\/banner-1544x500.png?rev=3490515","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/maskmyadmin\/assets\/icon-128x128.png?rev=3490515","icon_2x":"https:\/\/ps.w.org\/maskmyadmin\/assets\/icon-256x256.png?rev=3490515","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/maskmyadmin\/assets\/screenshot-1.jpg?rev=3489631","caption":"Settings screen to configure your custom login URL and redirection"},{"src":"https:\/\/ps.w.org\/maskmyadmin\/assets\/screenshot-2.jpg?rev=3489631","caption":"IP whitelist management with proxy\/CDN configuration"},{"src":"https:\/\/ps.w.org\/maskmyadmin\/assets\/screenshot-3.jpg?rev=3489631","caption":"Activity log showing login attempts and settings changes"},{"src":"https:\/\/ps.w.org\/maskmyadmin\/assets\/screenshot-4.jpg?rev=3489631","caption":""},{"src":"https:\/\/ps.w.org\/maskmyadmin\/assets\/screenshot-5.jpg?rev=3489631","caption":""}],"raw_content":"<!--section=description-->\n<p><strong>MaskMyAdmin<\/strong> is a lightweight WordPress plugin designed to enhance your login page security by:<\/p>\n\n<p>\u2013 Replacing the default <code>wp-admin<\/code> and <code>wp-login.php<\/code> URLs with a custom login path of your choice\n\u2013 Enforcing IP-based access controls for the WordPress dashboard and login screen\n\u2013 Preventing unauthorized access or brute-force attempts by obscuring default login endpoints<\/p>\n\n<p>Designed for site owners and developers who want to hide their admin panel from bots, attackers, or curious users.<\/p>\n\n<p>Whether you're running a blog, WooCommerce store, or enterprise WordPress install \u2014 MaskMyAdmin gives you a simple, intuitive way to lock down your admin entry points.<\/p>\n\n<p><strong>Features:<\/strong>\n* Change wp-admin login path to a custom one (e.g., <code>\/secure-login<\/code>)\n* Optional IP-based whitelist \u2014 restrict dashboard access to specific IPs only\n* Redirect blocked attempts to a custom page or homepage\n* Progressive brute-force lockout (15 min \u2192 1 hour \u2192 24 hours)\n* Activity log for login attempts and settings changes\n* Email notifications for blocked IPs, failed logins, and settings changes\n* Configurable proxy\/CDN header for accurate IP detection (Cloudflare, Nginx, etc.)\n* WP-CLI commands for emergency recovery and management\n* Emergency disable via <code>wp-config.php<\/code> constant\n* Defense-in-depth .htaccess rules for Apache servers (PHP handles all server types)\n* Lightweight and fast \u2014 minimal performance impact\n* Clean uninstall \u2014 all data removed when plugin is deleted<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20change%20the%20admin%20url%3F\"><h3>How do I change the admin URL?<\/h3><\/dt>\n<dd><p>After activating the plugin, go to <strong>MaskMyAdmin<\/strong> in the admin menu and enter your desired login slug (e.g., <code>my-login<\/code>). Your admin URL will become <code>yourdomain.com\/my-login<\/code>.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20wp-login.php%20and%20wp-admin%3F\"><h3>What happens to wp-login.php and wp-admin?<\/h3><\/dt>\n<dd><p>Both <code>wp-login.php<\/code> and <code>\/wp-admin<\/code> access will redirect to the homepage or a custom URL (configurable), effectively hiding them from bots or attackers.<\/p><\/dd>\n<dt id=\"how%20do%20i%20enable%20ip%20whitelisting%3F\"><h3>How do I enable IP whitelisting?<\/h3><\/dt>\n<dd><p>Under the plugin settings (Advanced Security tab), you can enable IP whitelisting and enter allowed IP addresses. Only visitors from these IPs will be able to access the login page.<\/p><\/dd>\n<dt id=\"i%27m%20behind%20cloudflare%20%2F%20a%20proxy.%20how%20do%20i%20get%20the%20correct%20ip%3F\"><h3>I'm behind Cloudflare \/ a proxy. How do I get the correct IP?<\/h3><\/dt>\n<dd><p>Go to <strong>Advanced Security \u2192 Proxy \/ CDN Configuration<\/strong> and select the appropriate header for your setup (e.g., \"Cloudflare\" for CF-Connecting-IP).<\/p><\/dd>\n<dt id=\"what%20if%20i%20get%20locked%20out%3F\"><h3>What if I get locked out?<\/h3><\/dt>\n<dd><p>You have several recovery options:<\/p>\n\n<ol>\n<li><strong>WP-CLI:<\/strong> Run <code>wp maskmy disable<\/code> to disable all protections<\/li>\n<li><strong>wp-config.php:<\/strong> Add <code>define('MASKMY_DISABLE', true);<\/code> to bypass the plugin entirely<\/li>\n<li><strong>FTP:<\/strong> Rename the plugin folder via FTP or your hosting File Manager<\/li>\n<\/ol><\/dd>\n<dt id=\"does%20this%20work%20with%20nginx%3F\"><h3>Does this work with Nginx?<\/h3><\/dt>\n<dd><p>Yes. The plugin uses PHP for all URL masking and IP enforcement, which works on any server. The .htaccess rules are an additional layer for Apache servers only.<\/p><\/dd>\n<dt id=\"how%20long%20are%20activity%20logs%20kept%3F\"><h3>How long are activity logs kept?<\/h3><\/dt>\n<dd><p>Log entries older than 30 days are automatically cleaned up daily via WP-Cron.<\/p><\/dd>\n<dt id=\"what%20wp-cli%20commands%20are%20available%3F\"><h3>What WP-CLI commands are available?<\/h3><\/dt>\n<dd><p>MaskMyAdmin registers the <code>wp maskmy<\/code> command namespace with the following subcommands:<\/p>\n\n<ul>\n<li><code>wp maskmy status<\/code> \u2014 Show current configuration (login slug, redirect mode, IP whitelist status, allowed IPs, proxy header)<\/li>\n<li><code>wp maskmy reset<\/code> \u2014 Reset the login URL back to the WordPress default (<code>wp-login.php<\/code>)<\/li>\n<li><code>wp maskmy add-ip &lt;ip&gt;<\/code> \u2014 Add an IP address or CIDR range to the whitelist (e.g., <code>wp maskmy add-ip 192.168.1.100<\/code> or <code>wp maskmy add-ip 10.0.0.0\/24<\/code>)<\/li>\n<li><code>wp maskmy remove-ip &lt;ip&gt;<\/code> \u2014 Remove an IP address or CIDR range from the whitelist (auto-disables whitelist if the list becomes empty)<\/li>\n<li><code>wp maskmy disable<\/code> \u2014 Disable all protections immediately (resets login slug, redirect, and IP whitelist \u2014 useful for emergency recovery)<\/li>\n<li><code>wp maskmy enable --slug=&lt;slug&gt;<\/code> \u2014 Re-enable protections with a custom login slug (e.g., <code>wp maskmy enable --slug=my-login<\/code>). If <code>--slug<\/code> is omitted, re-enables with the previously saved slug.<\/li>\n<\/ul><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li><strong>Security:<\/strong> Removed debug backdoor file (debug-mma.php)<\/li>\n<li><strong>Security:<\/strong> Fixed IP spoofing vulnerability \u2014 IP detection now uses REMOTE_ADDR by default with configurable trusted proxy headers<\/li>\n<li><strong>Security:<\/strong> Disabled broken 2FA feature (hardcoded bypass codes removed)<\/li>\n<li><strong>Security:<\/strong> Fixed unescaped output throughout the plugin<\/li>\n<li><strong>Security:<\/strong> Replaced unsafe header() redirects with wp_redirect() \/ wp_safe_redirect()<\/li>\n<li><strong>Security:<\/strong> Sanitized all $_SERVER values<\/li>\n<li><strong>New:<\/strong> Activity log \u2014 tracks login attempts and settings changes<\/li>\n<li><strong>New:<\/strong> Email notifications \u2014 configurable alerts for blocks, failed logins, and settings changes<\/li>\n<li><strong>New:<\/strong> WP-CLI commands \u2014 <code>wp maskmy status<\/code>, <code>reset<\/code>, <code>add-ip<\/code>, <code>remove-ip<\/code>, <code>disable<\/code>, <code>enable<\/code><\/li>\n<li><strong>New:<\/strong> Emergency recovery constant \u2014 <code>define('MASKMY_DISABLE', true)<\/code> in wp-config.php<\/li>\n<li><strong>New:<\/strong> Progressive brute-force lockout (5 attempts = 15 min, 10 = 1 hour, 20 = 24 hours)<\/li>\n<li><strong>New:<\/strong> Proxy\/CDN configuration UI for accurate IP detection behind load balancers<\/li>\n<li><strong>New:<\/strong> Clean uninstall \u2014 removes all options, tables, transients, and .htaccess rules<\/li>\n<li><strong>Fix:<\/strong> Admin JavaScript now properly enqueued (was never loaded before)<\/li>\n<li><strong>Fix:<\/strong> Setup wizard form now actually submits (added form tag, name attribute, submit button type)<\/li>\n<li><strong>Fix:<\/strong> Fixed broken HTML structure in dashboard (nested cards, stray form tags)<\/li>\n<li><strong>Fix:<\/strong> Removed external Font Awesome CDN dependency \u2014 uses built-in Dashicons<\/li>\n<li><strong>Fix:<\/strong> Removed all inline script blocks \u2014 moved to properly enqueued admin.js<\/li>\n<li><strong>Fix:<\/strong> Removed dead\/orphaned code (unused functions, unreachable files)<\/li>\n<li><strong>Fix:<\/strong> Htaccess_Manager now uses Singleton pattern consistently<\/li>\n<li><strong>Fix:<\/strong> Secured backup directory with randomized name and Apache 2.2+2.4 compatible rules<\/li>\n<li><strong>Improvement:<\/strong> Centralized IP utility class replacing duplicate code<\/li>\n<li><strong>Improvement:<\/strong> Consistent WordPress Coding Standards throughout<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added option to redirect blocked IPs to homepage or custom URL<\/li>\n<li>Improved compatibility with latest WordPress core<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release with custom login URL and IP whitelist functionality<\/li>\n<\/ul>","raw_excerpt":"A WordPress Admin URL Masking Plugin with optional IP-based whitelisting to limit access to allowed IPs only.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/286657","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=286657"}],"author":[{"embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dropalshosting"}],"wp:attachment":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=286657"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=286657"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=286657"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=286657"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=286657"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=286657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}