{"id":331811,"date":"2026-06-26T05:58:51","date_gmt":"2026-06-26T05:58:51","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/naveencodes-login-defender\/"},"modified":"2026-06-26T05:58:40","modified_gmt":"2026-06-26T05:58:40","slug":"naveencodes-login-guard","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/naveencodes-login-guard\/","author":16310057,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0","requires":"6.5","requires_php":"8.0","requires_plugins":null,"header_name":"NaveenCodes Login Guard","header_author":"Naveen Goyal","header_description":"Brute-force protection, live login-attempt log, IP block\/allow lists, and instant email alerts \u2014 all on your server, zero external requests.","assets_banners_color":"1c1712","last_updated":"2026-06-26 05:58:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/naveencodes-login-guard\/","header_author_uri":"https:\/\/naveencodes.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":23,"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":"shinu1503","date":"2026-06-26 05:58:40"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3586811,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3586811,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3586811,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3586811,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3586811,"resolution":"1","location":"assets","locale":"","width":1714,"height":1045},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3586811,"resolution":"2","location":"assets","locale":"","width":1692,"height":593},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3586811,"resolution":"3","location":"assets","locale":"","width":1664,"height":574},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3586811,"resolution":"4","location":"assets","locale":"","width":1715,"height":1426}},"screenshots":{"1":"Dashboard \u2014 stat cards + 7-day bar chart + recent attempts","2":"Activity Log \u2014 full log with filters, inline Block IP button, CSV export","3":"IP Manager \u2014 blocked and allowed lists with add\/remove controls","4":"Settings \u2014 thresholds, alerts, log retention"}},"plugin_section":[262246],"plugin_tags":[2439,1945,15756,1229,600],"plugin_category":[54],"plugin_contributors":[232463],"plugin_business_model":[],"class_list":["post-331811","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-brute-force","plugin_tags-ip-block","plugin_tags-login-protection","plugin_tags-login-security","plugin_tags-security","plugin_category-security-and-spam-protection","plugin_contributors-shinu1503","plugin_committers-shinu1503"],"banners":{"banner":"https:\/\/ps.w.org\/naveencodes-login-guard\/assets\/banner-772x250.png?rev=3586811","banner_2x":"https:\/\/ps.w.org\/naveencodes-login-guard\/assets\/banner-1544x500.png?rev=3586811","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/naveencodes-login-guard\/assets\/icon-128x128.png?rev=3586811","icon_2x":"https:\/\/ps.w.org\/naveencodes-login-guard\/assets\/icon-256x256.png?rev=3586811","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/naveencodes-login-guard\/assets\/screenshot-1.png?rev=3586811","caption":"Dashboard \u2014 stat cards + 7-day bar chart + recent attempts"},{"src":"https:\/\/ps.w.org\/naveencodes-login-guard\/assets\/screenshot-2.png?rev=3586811","caption":"Activity Log \u2014 full log with filters, inline Block IP button, CSV export"},{"src":"https:\/\/ps.w.org\/naveencodes-login-guard\/assets\/screenshot-3.png?rev=3586811","caption":"IP Manager \u2014 blocked and allowed lists with add\/remove controls"},{"src":"https:\/\/ps.w.org\/naveencodes-login-guard\/assets\/screenshot-4.png?rev=3586811","caption":"Settings \u2014 thresholds, alerts, log retention"}],"raw_content":"<!--section=description-->\n<p><strong>Login Guard<\/strong> is a powerful, privacy-first login security plugin that runs entirely on your own server \u2014 no cloud service, no external API calls, no telemetry.<\/p>\n\n<h4>Core Features<\/h4>\n\n<p><strong>Brute-Force Protection<\/strong>\nAutomatically detects repeated failed login attempts from the same IP address. When a configurable threshold is reached, the IP is locked out and can be automatically added to the block list.<\/p>\n\n<p><strong>Live Login Activity Log<\/strong>\nEvery login attempt \u2014 successful, failed, or blocked \u2014 is recorded with IP address, username, user agent, and timestamp. Full filter, paginate, and export to CSV.<\/p>\n\n<p><strong>IP Block List<\/strong>\nManually block specific IP addresses, with permanent or time-limited expiry. Auto-blocked IPs are automatically pruned when their lockout period ends.<\/p>\n\n<p><strong>IP Allow List<\/strong>\nProtect your own IP or your developer's IP from ever being blocked \u2014 even during testing.<\/p>\n\n<p><strong>Instant Email Alerts<\/strong>\nGet notified when a suspicious number of failed attempts is detected from a single IP, or when a successful login occurs from a new location for any user.<\/p>\n\n<p><strong>Dashboard Overview<\/strong>\nAt-a-glance stats with a 7-day bar chart (no external chart libraries), auto-refreshed every 30 seconds.<\/p>\n\n<p><strong>WP Admin Dashboard Widget<\/strong>\nQuick stats and last 5 login attempts visible from the main WordPress dashboard.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Login Guard stores IP addresses and usernames in your own database. No data leaves your server.<\/p>\n\n<h4>Free, Forever<\/h4>\n\n<p>No upsells, no premium tier, no usage limits. Login Guard is completely free.<\/p>\n\n<p>\u2764\ufe0f <em>Dedicated in loving memory of Maa \u2014 18 May.<\/em><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>naveencodes-login-guard<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate through <strong>Plugins \u2192 Installed Plugins<\/strong><\/li>\n<li>Visit <strong>Login Guard \u2192 Settings<\/strong> to configure thresholds<\/li>\n<li>Done \u2014 your site is now protected<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20lock%20me%20out%20of%20my%20own%20site%3F\"><h3>Will this lock me out of my own site?<\/h3><\/dt>\n<dd><p>Add your own IP to the Allow List from <strong>IP Manager \u2192 Allowed<\/strong> to guarantee you are never blocked.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20cloudflare%20or%20load%20balancers%3F\"><h3>Does it work with Cloudflare or load balancers?<\/h3><\/dt>\n<dd><p>Yes. Login Guard checks <code>HTTP_CF_CONNECTING_IP<\/code>, <code>HTTP_X_REAL_IP<\/code>, and <code>HTTP_X_FORWARDED_FOR<\/code> before falling back to <code>REMOTE_ADDR<\/code>, so Cloudflare and most reverse-proxy setups work correctly.<\/p><\/dd>\n<dt id=\"how%20do%20i%20unblock%20an%20ip%3F\"><h3>How do I unblock an IP?<\/h3><\/dt>\n<dd><p>Go to <strong>Login Guard \u2192 IP Manager \u2192 Blocked<\/strong> and click <strong>Unblock<\/strong> next to the IP address.<\/p><\/dd>\n<dt id=\"does%20this%20slow%20down%20my%20login%20page%3F\"><h3>Does this slow down my login page?<\/h3><\/dt>\n<dd><p>No. The lockout check is a single indexed database query \u2014 typically under 1 ms.<\/p><\/dd>\n<dt id=\"can%20i%20export%20the%20log%3F\"><h3>Can I export the log?<\/h3><\/dt>\n<dd><p>Yes. Click <strong>Export CSV<\/strong> on the Activity Log page to download the full log with applied filters.<\/p><\/dd>\n<dt id=\"does%20it%20send%20data%20to%20any%20external%20service%3F\"><h3>Does it send data to any external service?<\/h3><\/dt>\n<dd><p>No. Every feature runs entirely on your server with zero external requests.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Brute-force lockout (configurable max attempts + window + lockout duration)<\/li>\n<li>Login activity log with filters, pagination, and CSV export<\/li>\n<li>IP block list: manual + auto-block with optional expiry<\/li>\n<li>IP allow list: IPs that are never blocked<\/li>\n<li>Email alert on suspicious activity (configurable threshold)<\/li>\n<li>Email alert on successful login from a new IP address<\/li>\n<li>7-day bar chart dashboard (no external libraries)<\/li>\n<li>WP Admin dashboard widget<\/li>\n<li>Block IP inline from activity log<\/li>\n<li>Daily cron: prune old log entries + expired blocks<\/li>\n<li>Full WP.org Plugin Check compliance<\/li>\n<\/ul>","raw_excerpt":"Brute-force protection, live login-attempt log, IP block\/allow lists, and instant email alerts \u2014 all on your server, zero external requests.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/331811","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=331811"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/shinu1503"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=331811"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=331811"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=331811"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=331811"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=331811"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=331811"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}