{"id":391432,"date":"2026-11-02T20:41:00","date_gmt":"2026-11-02T20:41:00","guid":{"rendered":"https:\/\/es.wordpress.org\/plugins\/balui-sentinel\/"},"modified":"2026-11-02T20:40:34","modified_gmt":"2026-11-02T20:40:34","slug":"balui-security-suite","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/balui-security-suite\/","author":23591185,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.8.2","stable_tag":"1.8.2","tested":"7.1.4","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"Balui Security Suite","header_author":"Balui Digital","header_description":"WordPress security from one clean dashboard: two-step verification (app and email), login attempt limits, password policy, CAPTCHA, custom login URL, security headers, hardening and comment controls.","assets_banners_color":"0c1d2a","last_updated":"2026-11-02 20:40:34","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/baluidigital.es\/categoria\/balui-security-suite\/","header_author_uri":"https:\/\/baluidigital.es","rating":0,"author_block_rating":0,"active_installs":0,"downloads":51,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.8.2":{"tag":"1.8.2","author":"baluidigital","date":"2026-11-02 20:40:34","revision":3780696}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3780696,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3780696,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3780696,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3780696,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.8.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3780696,"resolution":"1","location":"assets","locale":"","width":1600,"height":1035},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3780696,"resolution":"2","location":"assets","locale":"","width":1600,"height":1035},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3780696,"resolution":"3","location":"assets","locale":"","width":1600,"height":1035},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3780696,"resolution":"4","location":"assets","locale":"","width":1600,"height":1035},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3780696,"resolution":"5","location":"assets","locale":"","width":1600,"height":1035},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3780696,"resolution":"6","location":"assets","locale":"","width":1600,"height":1035}},"screenshots":{"1":"Overview: security score, recommendations and recent activity.","2":"Two-step verification: authenticator app or email codes, recovery codes and remembered devices.","3":"Login page protection: CAPTCHA (ALTCHA), custom login URL and attempt limit.","4":"Security headers with the checker that reads what your site really sends.","5":"One-click hardening, explained in plain words.","6":"Activity log of sign-ins, lockouts and security changes."}},"plugin_section":[],"plugin_tags":[9211,1229,600,153786,9217],"plugin_category":[54],"plugin_contributors":[290394],"plugin_business_model":[],"class_list":["post-391432","plugin","type-plugin","status-publish","hentry","plugin_tags-2fa","plugin_tags-login-security","plugin_tags-security","plugin_tags-security-headers","plugin_tags-two-factor","plugin_category-security-and-spam-protection","plugin_contributors-baluidigital","plugin_committers-baluidigital"],"banners":{"banner":"https:\/\/ps.w.org\/balui-security-suite\/assets\/banner-772x250.png?rev=3780696","banner_2x":"https:\/\/ps.w.org\/balui-security-suite\/assets\/banner-1544x500.png?rev=3780696","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/balui-security-suite\/assets\/icon-128x128.png?rev=3780696","icon_2x":"https:\/\/ps.w.org\/balui-security-suite\/assets\/icon-256x256.png?rev=3780696","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/balui-security-suite\/assets\/screenshot-1.png?rev=3780696","caption":"Overview: security score, recommendations and recent activity."},{"src":"https:\/\/ps.w.org\/balui-security-suite\/assets\/screenshot-2.png?rev=3780696","caption":"Two-step verification: authenticator app or email codes, recovery codes and remembered devices."},{"src":"https:\/\/ps.w.org\/balui-security-suite\/assets\/screenshot-3.png?rev=3780696","caption":"Login page protection: CAPTCHA (ALTCHA), custom login URL and attempt limit."},{"src":"https:\/\/ps.w.org\/balui-security-suite\/assets\/screenshot-4.png?rev=3780696","caption":"Security headers with the checker that reads what your site really sends."},{"src":"https:\/\/ps.w.org\/balui-security-suite\/assets\/screenshot-5.png?rev=3780696","caption":"One-click hardening, explained in plain words."},{"src":"https:\/\/ps.w.org\/balui-security-suite\/assets\/screenshot-6.png?rev=3780696","caption":"Activity log of sign-ins, lockouts and security changes."}],"raw_content":"<!--section=description-->\n<p>Balui Security Suite, by Balui Digital, protects WordPress sites without dozens of screens. Everything is configured from one modern dashboard with light and dark themes, ready to be translated. It is designed for site owners without technical knowledge: the defaults are safe and every option explains what it does.<\/p>\n\n<ul>\n<li><strong>Two-step verification<\/strong>: authenticator app (TOTP, RFC 6238) or one-time email codes, recovery codes and remembered devices. Each user turns it on from their profile. Works on wp-login.php, WooCommerce \"My account\" and any form that uses the WordPress login.<\/li>\n<li><strong>Login attempt limit<\/strong>: per account and per IP, progressive lockouts, notifications and generic error messages that never disclose whether a user exists. Also protects the WooCommerce login.<\/li>\n<li><strong>Password policy<\/strong>: minimum length, character mix, no username or email inside the password, and breached-password detection with Have I Been Pwned (k-anonymity).<\/li>\n<li><strong>CAPTCHA<\/strong> with ALTCHA (proof of work solved in the browser and checked on your own server: no keys, no cookies and no third parties) on login, registration, lost password, comments and WooCommerce.<\/li>\n<li><strong>Custom login URL<\/strong>: wp-login.php and \/wp-admin\/ stop answering for visitors.<\/li>\n<li><strong>Security headers<\/strong>: HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, COOP\/CORP and a Content-Security-Policy you write (Report-Only first, then enforced). A checker shows the headers your site really sends.<\/li>\n<li><strong>Hardening<\/strong>: XML-RPC, application passwords, REST user listing, user enumeration, file editor, PHP in uploads, directory listing, sensitive files, version disclosure, pingbacks, forced HTTPS for the dashboard and more.<\/li>\n<li><strong>Integrations<\/strong>: detects management panels, supplier syncs, payment gateways and AI assistants, and tells you before a protection would cut one of them off.<\/li>\n<li><strong>Comments<\/strong>: disable everywhere or per content type, close existing threads, hide the UI and the feed, or strip links.<\/li>\n<li><strong>Security score and one-click recommendations<\/strong>, activity log (you choose how many days it is kept), privacy tools integration, settings export and import, WP-CLI commands.<\/li>\n<\/ul>\n\n<h4>Balui Security Suite Pro<\/h4>\n\n<p><a href=\"https:\/\/baluidigital.es\/categoria\/balui-security-suite\/\">Balui Security Suite Pro<\/a> is a separate plugin that includes everything above and adds a firewall with country blocking, CAPTCHA services from external providers (Cloudflare Turnstile, hCaptcha, Google reCAPTCHA, Friendly Captcha, MTCaptcha), a Content-Security-Policy assistant with automatic nonces for an A+ grade, passkeys, magic links, temporary access, two-step verification required by role, password expiry and history, session control, an integrity scan, vulnerability alerts, activity log export to CSV, weekly reports, WooCommerce \"My account \u203a Security\", multisite and support. When you install it, it replaces this plugin and keeps all your settings. This plugin is complete on its own and never needs Pro to work.<\/p>\n\n<h3>External services<\/h3>\n\n<p>Balui Security Suite only connects to other services for the features below. Nothing is sent to Balui Digital.<\/p>\n\n<ul>\n<li><strong>Have I Been Pwned (Pwned Passwords)<\/strong>, only if you turn on \"Reject breached passwords\" (off by default). Then, when a password is set or checked, the first 5 characters of its SHA-1 hash are sent to api.pwnedpasswords.com; the password itself, the site address and user data never leave the site. <a href=\"https:\/\/haveibeenpwned.com\/API\/v3#AcceptableUse\">Terms<\/a>, <a href=\"https:\/\/haveibeenpwned.com\/Privacy\">privacy<\/a>.<\/li>\n<li><strong>Your own site<\/strong>: the \"Check now\" button in Headers requests your home page to read the headers it returns, and after removing lines from .htaccess or .user.ini (Hardening \u203a Server files) the plugin requests your home page and one admin stylesheet to make sure the site still works. Nothing is sent anywhere else.<\/li>\n<\/ul>\n\n<h3>Third-party libraries<\/h3>\n\n<p>The plugin includes these open-source libraries, unmodified. Their readable source code is public:<\/p>\n\n<ul>\n<li>ALTCHA widget 2.2.4 (<code>assets\/altcha.min.js<\/code>), MIT license. Source: <a href=\"https:\/\/github.com\/altcha-org\/altcha\">github.com\/altcha-org\/altcha<\/a>, file <code>dist\/altcha.i18n.umd.js<\/code> of the npm package <code>altcha<\/code>.<\/li>\n<li>QR Code Generator 2.0.4 by Kazuhiko Arase (<code>assets\/qrcode.js<\/code>), MIT license. Source: <a href=\"https:\/\/github.com\/kazuhikoarase\/qrcode-generator\">github.com\/kazuhikoarase\/qrcode-generator<\/a>, file <code>dist\/qrcode.js<\/code> of the npm package <code>qrcode-generator<\/code>.<\/li>\n<li>Geist and Geist Mono fonts (<code>assets\/fonts\/<\/code>), SIL Open Font License 1.1 (<code>assets\/fonts\/OFL.txt<\/code>). Source: <a href=\"https:\/\/github.com\/vercel\/geist-font\">github.com\/vercel\/geist-font<\/a>.<\/li>\n<\/ul>\n\n<p>The rest of the CSS and JavaScript is not minified.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>When two-step verification is in use, the plugin asks you to add its encryption key to wp-config.php with one click (Settings \u203a Encryption key). Nothing is written to wp-config.php without that click.<\/li>\n<li>Open Balui Security Suite in the admin menu and follow the recommendations.<\/li>\n<\/ol>\n\n<p>On Apache and LiteSpeed the hardening measures marked \"server\" are written to .htaccess (in the site root and in the uploads folder), inside a block marked \"Balui Security Suite\". Four of them are on by default: no directory listing, PHP blocked in uploads, sensitive files and readme.html\/license.txt blocked. You can turn each one off in Hardening, and the block is removed when the plugin is deleted.<\/p>\n\n<p>Emergency switches for wp-config.php: <code>BALUI_SECURITY_2FA_OFF<\/code> (second step only), <code>BALUI_SECURITY_LOGIN_URL_OFF<\/code> (custom login URL) and <code>BALUI_SECURITY_OFF<\/code> (whole plugin).<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"i%20locked%20myself%20out.%20what%20do%20i%20do%3F\"><h3>I locked myself out. What do I do?<\/h3><\/dt>\n<dd><p>Add <code>define( 'BALUI_SECURITY_2FA_OFF', true );<\/code> to wp-config.php to skip the second step, or <code>define( 'BALUI_SECURITY_OFF', true );<\/code> to turn the whole plugin off. You can also rename the plugin folder by FTP.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Two-step verification, the login attempt limit, the password policy and the CAPTCHA also work on the WooCommerce \"My account\" login, registration and checkout.<\/p><\/dd>\n<dt id=\"are%20there%20hooks%20for%20developers%3F\"><h3>Are there hooks for developers?<\/h3><\/dt>\n<dd><p>Filters: <code>bsnt_capability<\/code> (capability needed to manage the plugin, default <code>manage_options<\/code>), <code>bsnt_allow_without_second_step<\/code> (return true to let a given user sign in through XML-RPC or the REST API with the normal password, for example a service account), <code>bsnt_totp_issuer<\/code> (name shown in the authenticator app), <code>bsnt_static_headers<\/code> (security headers sent), <code>bsnt_csp_skip<\/code> and <code>bsnt_csp_directives<\/code> (pages without Content-Security-Policy, and the directives sent), <code>bsnt_send_mail<\/code> (send the plugin's emails with your own mailer). Actions: <code>bsnt_event<\/code> (every activity log event), <code>bsnt_lockout<\/code>, <code>bsnt_tfa_reset<\/code> and <code>bsnt_settings_updated<\/code>.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20settings%20if%20i%20move%20to%20balui%20security%20suite%20pro%3F\"><h3>What happens to my settings if I move to Balui Security Suite Pro?<\/h3><\/dt>\n<dd><p>They are kept. Pro uses the same settings and turns this plugin off when it is activated.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.8.2<\/h4>\n\n<ul>\n<li>CAPTCHA uses ALTCHA only: the challenge is solved in the visitor's browser and checked on your own server. Nothing is loaded from or sent to third parties.<\/li>\n<li>The encryption key is only added to wp-config.php when you press the button.<\/li>\n<li>Multisite: the server rules (.htaccess) are written from the main site's settings, and the custom login URL is not offered (all the sites share the login page).<\/li>\n<li>The dashboard follows the WordPress language of each user.<\/li>\n<li>Activity log queries, privacy tools and uninstall use fully prepared SQL.<\/li>\n<li>Code clean-up: removed code and options that this plugin did not use.<\/li>\n<\/ul>\n\n<h4>1.8.1<\/h4>\n\n<ul>\n<li>This plugin no longer contains any multisite network administration or code from Balui Security Suite Pro. On a multisite each site is configured on its own.<\/li>\n<li>Server files: the backups made before cleaning .htaccess or .user.ini are now kept in the database (the last 10) instead of as files in the uploads folder. Existing backups are moved automatically and the old folder is removed.<\/li>\n<li>Server files: the files are located with WordPress functions (get_home_path() and wp_upload_dir()).<\/li>\n<li>Paths to the plugins folder and to WordPress core are worked out with WordPress functions instead of constants.<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li>New: before writing its server rules, the plugin checks .htaccess and .user.ini for leftovers of security plugins that are no longer active (WP Cerber, Wordfence, Solid Security, All-In-One Security, NinjaFirewall), sections without a pair (a 500 error on Apache) and auto_prepend_file lines pointing to missing files. If something can break the site, its own rules wait and the administrator decides.<\/li>\n<li>New: Hardening \u203a Server files explains each finding and offers to remove it after a backup. If the site answers worse afterwards, the backup is put back automatically. Undo for 24 hours.<\/li>\n<li>New: WP-CLI command wp balui-security-suite htaccess [check|clean|ignore|undo], which also works when the site shows a 500 error.<\/li>\n<li>Nothing is changed without an explicit action, and rules of plugins that are still active are never offered for removal.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>New name: Balui Security Suite (formerly Balui Sentinel).<\/li>\n<li>The activity log keeps as many days as you choose (7 to 730).<\/li>\n<li>The breached-password check (Have I Been Pwned) is now off by default and is only used if you turn it on.<\/li>\n<li>\"Force HTTPS for login and dashboard\" uses WordPress's own force_ssl_admin(); the plugin no longer changes automatic update settings.<\/li>\n<li>Two-step verification form protected with a WordPress nonce; stricter sanitising of request data and escaping of output.<\/li>\n<li>WP-CLI: wp balui-security-suite.<\/li>\n<\/ul>\n\n<h4>1.6.2<\/h4>\n\n<ul>\n<li>Database queries use placeholders for table names.<\/li>\n<li>Translator notes for strings with placeholders.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>The Pro links now point to baluidigital.es\/categoria\/balui-security-suite\/.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>First version on WordPress.org.<\/li>\n<li>New: Content-Security-Policy written by hand, with a starting template and Report-Only mode.<\/li>\n<li>The plugin cannot be active at the same time as Balui Security Suite Pro, which already includes it.<\/li>\n<\/ul>","raw_excerpt":"Security from one clean dashboard: two-step verification, login limits, password policy, CAPTCHA, custom login URL, security headers and hardening.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/391432","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=391432"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/baluidigital"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=391432"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=391432"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=391432"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=391432"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=391432"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=391432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}