{"id":384803,"date":"2026-10-16T18:59:51","date_gmt":"2026-10-16T18:59:51","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/neverlast-security-lite\/"},"modified":"2026-10-16T18:59:38","modified_gmt":"2026-10-16T18:59:38","slug":"neverlast-security-lite","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/neverlast-security-lite\/","author":23574968,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.7","stable_tag":"1.2.7","tested":"7.1.3","requires":"6.6","requires_php":"8.1","requires_plugins":null,"header_name":"NeverLast Security Lite","header_author":"L\u0103jea Alexandru","header_description":"Independent GPL security essentials for WordPress: local firewall, login protection, TOTP, health checks, integrity monitoring and activity logs.","assets_banners_color":"","last_updated":"2026-10-16 18:59:38","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/neverlast.ro\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":39,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.7":{"tag":"1.2.7","author":"neverlast","date":"2026-10-16 18:59:38","revision":3750997}},"upgrade_notice":{"1.2.7":"<p>Addresses Plugin Check filesystem warnings while keeping encrypted quarantine evidence streamed in bounded chunks. Evidence permission failures now stop quarantine without deleting the source.<\/p>","1.2.6":"<p>Moves held evidence to encrypted, uploads-based quarantine storage with safe legacy migration. Direct restoration from the admin interface is removed. Export retained evidence before rotating site authentication salts.<\/p>","1.2.5":"<p>Closes a firewall gap: a hostile request body sent with GET, or under an unlisted or unusual Content-Type, was not inspected. Recommended for all sites.<\/p>","1.2.4":"<p>Fixes comparisons that stopped with a storage error, or reported an existing file as deleted, when files changed during the scan. Recommended for all sites.<\/p>","1.2.3":"<p>Fixes quarantine on WordPress 6.6, where a quarantined file was removed without keeping the held copy. Recommended for all sites.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3751026,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3751026,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.7"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3751026,"resolution":"1","location":"assets","locale":"","width":1440,"height":1000},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3751026,"resolution":"2","location":"assets","locale":"","width":1425,"height":990},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3751026,"resolution":"3","location":"assets","locale":"","width":1425,"height":990},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3751026,"resolution":"4","location":"assets","locale":"","width":1440,"height":1000},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3751026,"resolution":"5","location":"assets","locale":"","width":1425,"height":990},"screenshot-6.jpg":{"filename":"screenshot-6.jpg","revision":3751026,"resolution":"6","location":"assets","locale":"","width":1440,"height":1000},"screenshot-7.jpg":{"filename":"screenshot-7.jpg","revision":3751026,"resolution":"7","location":"assets","locale":"","width":1440,"height":1000}},"screenshots":[]},"plugin_section":[],"plugin_tags":[168808,1174,1229,600,1909],"plugin_category":[54],"plugin_contributors":[287159,287158],"plugin_business_model":[],"class_list":["post-384803","plugin","type-plugin","status-publish","hentry","plugin_tags-file-integrity","plugin_tags-firewall","plugin_tags-login-security","plugin_tags-security","plugin_tags-two-factor-authentication","plugin_category-security-and-spam-protection","plugin_contributors-lajea87","plugin_contributors-neverlast","plugin_committers-neverlast"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/neverlast-security-lite\/assets\/icon-128x128.png?rev=3751026","icon_2x":"https:\/\/ps.w.org\/neverlast-security-lite\/assets\/icon-256x256.png?rev=3751026","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/neverlast-security-lite\/assets\/screenshot-1.jpg?rev=3751026","caption":""},{"src":"https:\/\/ps.w.org\/neverlast-security-lite\/assets\/screenshot-2.jpg?rev=3751026","caption":""},{"src":"https:\/\/ps.w.org\/neverlast-security-lite\/assets\/screenshot-3.jpg?rev=3751026","caption":""},{"src":"https:\/\/ps.w.org\/neverlast-security-lite\/assets\/screenshot-4.jpg?rev=3751026","caption":""},{"src":"https:\/\/ps.w.org\/neverlast-security-lite\/assets\/screenshot-5.jpg?rev=3751026","caption":""},{"src":"https:\/\/ps.w.org\/neverlast-security-lite\/assets\/screenshot-6.jpg?rev=3751026","caption":""},{"src":"https:\/\/ps.w.org\/neverlast-security-lite\/assets\/screenshot-7.jpg?rev=3751026","caption":""}],"raw_content":"<!--section=description-->\n<p>NeverLast Security Lite is a complete, standalone security plugin. It runs inside your site: no account, no licence key, no telemetry, and no feature locked behind an upgrade.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Firewall<\/strong> - inspects requests for common SQL injection, XSS, path traversal, file inclusion, command injection, Log4Shell and Shellshock shapes, in Monitor, Balanced or Strict mode.<\/li>\n<li><strong>Upload protection<\/strong> - rejects executable uploads, smuggled server-control files and images that carry code, and holds uploads it cannot fully inspect.<\/li>\n<li><strong>Login security<\/strong> - attempt limits and lockouts, generic login errors, author-enumeration and REST user protection, XML-RPC and Application Password controls.<\/li>\n<li><strong>Two-factor authentication<\/strong> - optional TOTP for administrators with encrypted secrets and one-use recovery codes.<\/li>\n<li><strong>Emergency controls<\/strong> - end every session or freeze logins, with an optional secret-protected emergency link in login alerts.<\/li>\n<li><strong>Health check<\/strong> - a prioritized score with plain-language recommendations.<\/li>\n<li><strong>Integrity monitoring<\/strong> - an approved local baseline of your files, resumable comparison for large sites, uploads review, and optional verification against WordPress.org checksums.<\/li>\n<li><strong>Quarantine you decide<\/strong> - a suspicious upload is held as an authenticated encrypted, non-executable copy until you download it as evidence or delete it. Nothing is deleted automatically.<\/li>\n<li><strong>Activity log<\/strong> - bounded retention, masked IP addresses, CSV and JSON export, and throttled email alerts.<\/li>\n<li><strong>Security headers<\/strong> - baseline browser headers and optional CSP Report-Only diagnostics.<\/li>\n<\/ul>\n\n<h4>What it does not do<\/h4>\n\n<p>Lite runs inside WordPress, so it cannot protect anything served before WordPress loads and it does not replace web-server, hosting, CDN or backup controls. It does not scan database content, it logs but does not block the creation of administrator accounts, and it never repairs files automatically. An integrity baseline shows what changed since you approved it; it does not prove the approved state was clean. Single-site installations only.<\/p>\n\n<p>No security product can guarantee a site is free of vulnerabilities. Keep WordPress, PHP, plugins and themes updated, use least privilege, and keep tested off-site backups.<\/p>\n\n<p>Support and security contact: nss@neverlast.ro<\/p>\n\n<h3>External services<\/h3>\n\n<p>NeverLast Security Lite never sends site content, credentials, visitor records or telemetry, and never contacts NeverLast. Every connection to another service is off until you turn it on:<\/p>\n\n<h4>Official crawler IP lists - off by default<\/h4>\n\n<p>Only when you enable a provider under Protection, WP-Cron downloads its public IP list once a day so that provider's genuine crawler is not counted against the optional anonymous rate limit. The request carries your server's IP address and a plugin user agent that does not include your site's address; nothing else is sent.<\/p>\n\n<ul>\n<li>DuckDuckGo: https:\/\/duckduckgo.com\/duckduckbot.json - privacy https:\/\/duckduckgo.com\/privacy\/<\/li>\n<li>Ahrefs: https:\/\/api.ahrefs.com\/v3\/public\/crawler-ip-ranges - terms https:\/\/ahrefs.com\/legal\/terms, privacy https:\/\/ahrefs.com\/legal\/privacy-policy<\/li>\n<li>UptimeRobot: https:\/\/cdn.uptimerobot.com\/api\/IPv4andIPv6.txt - terms https:\/\/uptimerobot.com\/terms\/, privacy https:\/\/uptimerobot.com\/privacy\/<\/li>\n<\/ul>\n\n<h4>WordPress.org checksums - off by default<\/h4>\n\n<p>Only when you enable \"Verify changed core and plugin files with WordPress.org checksums\" under Protection, a comparison that finds changed, added or missing WordPress core or plugin files downloads the official checksums for that release, to tell a genuine update apart from tampering. Core checksums come from https:\/\/api.wordpress.org\/core\/checksums\/1.0\/ with the WordPress version and locale; plugin checksums come from https:\/\/downloads.wordpress.org\/plugin-checksums\/ with the plugin slug and version. Requests carry your server's IP address and a plugin user agent without your site's address, and results are cached for six hours. While this is off, files are compared with your approved baseline only. WordPress.org privacy policy: https:\/\/wordpress.org\/about\/privacy\/<\/p>\n\n<h4>Your own site<\/h4>\n\n<p>The Directory listing health check requests your own uploads address to see whether the server returns a file index. Optional crawler verification uses your server's DNS resolver; no verification API is contacted.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>Security events are stored in your WordPress database with a masked IP address, a salted one-way IP hash, the request method and path, and bounded redacted context. Passwords, cookies, authorization headers, nonces, secrets and recovery codes are never logged. The activity log keeps seven days by default. Email alerts use your site's own mail configuration and go to the WordPress administration email unless you set another address. Throttled critical alerts are on by default; administrator-login alerts and the weekly summary are sent only when enabled.<\/p>\n\n<p>A quarantined file is held under an access-restricted neverlast-security-lite\/quarantine directory in your configured uploads folder with authenticated AES-256-GCM encryption and its original SHA-256. Apache\/IIS access-control files are included; nginx and other web servers should still explicitly deny direct HTTP access. Decryption uses the WordPress authentication salts, so export retained evidence before rotating or replacing those salts. On upgrade, previous Base64 evidence is checked and re-encrypted when migrated from wp-content\/.nlssl-quarantine; originals are kept if migration fails. Direct restoration of executable evidence is disabled; download it for offline analysis or permanently delete it. Evidence survives ordinary uninstall; enabling \"Delete Lite data on uninstall\" removes held data along with settings and tables.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install through Plugins &gt; Add New, or upload the ZIP, then activate. Protective defaults apply at once: the firewall in Balanced mode, XML-RPC and Application Passwords disabled, public REST user endpoints hidden, author enumeration blocked and the dashboard code editor disabled.<\/li>\n<li>Open NeverLast Security &gt; Protection. If Jetpack, the WordPress mobile apps or another service needs XML-RPC or an Application Password, untick the matching control. Start in Monitor if you are unsure about compatibility, then move to Balanced.<\/li>\n<li>Run the Health Check and work through the prioritized items.<\/li>\n<li>Review your installed files, then create the first integrity baseline.<\/li>\n<li>Enroll each administrator in TOTP and store the recovery codes offline.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20lite%20a%20restricted%20version%20of%20a%20paid%20product%3F\"><h3>Is Lite a restricted version of a paid product?<\/h3><\/dt>\n<dd><p>No. Lite is complete on its own, with its own code, settings and database tables. Nothing is locked, trial-limited or downloaded at runtime.<\/p><\/dd>\n<dt id=\"which%20firewall%20mode%20should%20i%20use%3F\"><h3>Which firewall mode should I use?<\/h3><\/dt>\n<dd><p>Monitor records matching requests without blocking. Balanced blocks high-confidence matches and suits most sites after a period of observation. Strict blocks at a lower threshold; test forms, checkout and custom APIs before enabling it.<\/p><\/dd>\n<dt id=\"why%20does%20a%20comparison%20report%20differences%20after%20i%20update%20a%20plugin%3F\"><h3>Why does a comparison report differences after I update a plugin?<\/h3><\/dt>\n<dd><p>Your baseline describes the versions you approved. After an update, review the reported package changes and, if they are what you installed, create a new baseline.<\/p><\/dd>\n<dt id=\"does%20a%20clean%20comparison%20prove%20there%20is%20no%20malware%3F\"><h3>Does a clean comparison prove there is no malware?<\/h3><\/dt>\n<dd><p>No. It shows that the monitored files match the baseline you approved. It cannot see logic flaws, database content or files outside its scope.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20a%20quarantined%20file%3F\"><h3>What happens to a quarantined file?<\/h3><\/dt>\n<dd><p>It is removed from uploads and held as an encrypted copy until you choose to download it as evidence or delete it permanently. Direct restoration of suspicious files has been disabled to prevent executable files being reintroduced. If something outside NeverLast Security removes the held copy, for example host antivirus, the entry is reported as missing rather than silently disappearing.<\/p><\/dd>\n<dt id=\"how%20do%20i%20recover%20if%20my%20authenticator%20is%20unavailable%3F\"><h3>How do I recover if my authenticator is unavailable?<\/h3><\/dt>\n<dd><p>Use an unused recovery code, or ask another administrator to reset your TOTP. Store recovery codes offline before rotating AUTH_KEY or AUTH_SALT, because existing TOTP secrets cannot be decrypted afterwards.<\/p><\/dd>\n<dt id=\"how%20do%20i%20lift%20an%20emergency%20login%20freeze%3F\"><h3>How do I lift an Emergency Login Freeze?<\/h3><\/dt>\n<dd><p>Reset an administrator password through the normal WordPress flow, wait for the freeze to expire, or define NLSSL_DISABLE_LOGIN_FREEZE as true in wp-config.php as an offline override, and remove it afterwards.<\/p><\/dd>\n<dt id=\"does%20uninstall%20remove%20my%20data%3F\"><h3>Does uninstall remove my data?<\/h3><\/dt>\n<dd><p>Only if \"Delete Lite data on uninstall\" was enabled first. Deactivation never deletes security data.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>Uses WordPress filesystem abstractions for evidence permissions, writable-folder checks, and nonrecursive uninstall cleanup. Retains bounded encrypted streaming for safety with an explicitly documented PHP_CodeSniffer exception. Operations fail closed when private permissions cannot be enforced.<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>WordPress.org prereview remediation: configured uploads quarantine storage with legacy evidence encryption and migration, portable findings paths, no direct executable restoration, restricted dashboard notices, and corrected privacy URL.<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Fixed: a request body sent with GET, or under a Content-Type the firewall did not list (WordPress still reads \"application\/json,\" as JSON), was not inspected. Every body is now inspected; binary files are left to the upload guard.<\/li>\n<li>Fixed: data deletion on uninstall left the quarantine .htaccess and failed storage probes behind.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Fixed: a baseline or comparison that runs in several steps could check a folder twice or skip a file when files were added or removed meanwhile, for example the .maintenance file WordPress writes during an update. The comparison then stopped with a storage error or reported an existing file as deleted. Each folder now resumes after the last file name it checked.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Fixed: on WordPress 6.6, quarantine removed a file from uploads but discarded the held copy and reported that nothing was quarantined. Deletions are now confirmed on disk.<\/li>\n<li>The emergency response page loads its styles through the WordPress style API.<\/li>\n<\/ul>\n\n<p>The complete history is in changelog.txt inside the plugin folder.<\/p>","raw_excerpt":"Local-first WordPress security: bounded firewall, login controls, administrator TOTP, health checks, integrity evidence and activity logs.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/384803","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=384803"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/neverlast"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=384803"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=384803"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=384803"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=384803"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=384803"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=384803"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}