Descripción
WordSec is a complete WordPress security plugin. Eight modules cover the firewall, malware scanner, login security, live traffic, IP and country blocking, supply-chain intelligence, audit log and alerts, so you block attacks and harden your site from one dashboard instead of installing eight plugins.
If your site gets hacked you do not just lose the site. You lose customer trust, your search rankings, and days of work restoring backups. WordSec is built to stop that before it happens, and to help you recover if it already has: the scanner finds the malware, quarantine takes it out of the way, and modified core, plugin and theme files are repaired from their original copies.
Free, and no license key to enter. WAF firewall rules, malware and file-integrity scanning, brute force protection, two factor authentication, IP and country blocking, the audit log and one-click hardening all run locally on your own server.
Web Application Firewall (WAF)
- Custom rule builder with regex and wildcard matching
- Built-in rules for SQL injection, XSS, path traversal, PHP and command injection
- Learning and active modes, bot blocking, security headers, rate limiting
- 25+ hardening toggles for wp-config access, author enumeration and REST API
- Optional Extended Protection: pre-WordPress request inspection (opt-in, fully reversible)
Malware Scanner and Removal
- Malware detection rules across files, the database and scheduled tasks
- Core, plugin and theme file-integrity verification via the WordPress.org API
- Scheduled scans, one-click quarantine and restore
- Malware removal on a hacked site: quarantine a finding, or repair a modified core, plugin or theme file from its original copy
Login Security, Two-Factor Authentication (2FA) and Brute Force Protection
- Role-based two-factor authentication (RFC 6238 TOTP)
- reCAPTCHA, hCaptcha and Cloudflare Turnstile, plus a built-in math CAPTCHA
- Brute-force protection with progressive lockout, honeypot and login URL rename
- Leaked-password checking, session management, custom login page
Tráfico en vivo
- Real-time request logging with bot detection and CSV export
- Exclusion filtering by role, IP, country or URI
IP and Country Blocking
- Listas de permitidos o de bloqueo de países y continentes
- Bloqueo de IP individuales y rangos CIDR, temporal o permanente, con soporte de lista de permitidos
Supply Chain and Threat Intelligence
- Reputation scoring and abandoned-plugin detection
- Known-vulnerability alerts for core, plugins, themes and PHP
- Update-integrity verification with backups and an SBOM inventory
Registro de auditoría
- Seguimiento completo de la actividad en 11 tipos de objetos y 14 acciones
Alarmas
- 36 alert event types delivered by Email, Telegram or Slack
Every feature runs locally with no license key. Optionally, the WordSec service at wordsec.net supplies threat-intelligence data that cannot be produced locally: managed WAF rule sets, the malware signature feed, IP-reputation lists, the GeoIP database and vulnerability records. Connecting is optional and every external service is documented in «External services» below.
Servicios externos
WordSec está diseñado para ejecutarse localmente y, sin clave de licencia, no realiza ninguna petición saliente al servicio de WordSec. El filtrado principal de peticiones y el análisis de archivos se ejecutan en tu servidor. Los servicios enumerados a continuación se contactan únicamente para las funciones específicas descritas, y la mayoría de ellos solo cuando activas explícitamente esa función (o, en el caso de la API de WordSec, solo después de que actives una clave de licencia). Esta sección documenta todos los servicios de terceros a los que el plugin puede conectarse y los datos que recibe cada uno.
API de WordSec (api.wordsec.net)
WordSec funciona de forma gratuita sin licencia, en cuyo caso no contacta en absoluto con este servicio. Hay una licencia gratuita disponible para todo el mundo; una vez que activas una clave, el plugin se comunica con el servicio de WordSec con dos propósitos distintos:
- Llamadas de servicio requeridas (solo mientras haya una clave de licencia activa): activación y validación de la licencia, y actualizaciones de datos de amenazas (reglas del firewall, firmas de malware, listas de reputación de IP, datos GeoIP, la lista de dominios de correo desechable y datos de vulnerabilidades conocidas). Estas habilitan las funciones respaldadas en la nube y no pueden realizarse localmente; sin clave, no se realiza ninguna de estas llamadas. El código local de aplicación de estas funciones (el motor del WAF, el escáner de malware, los filtros de bloqueo de IP y el filtro de restricción de registro) está siempre presente y activo; sin un feed actualizado, simplemente no tiene datos de inteligencia de amenazas con los que contrastar las peticiones.
* Cuándo: en la activación/validación y en las comprobaciones programadas de actualización de datos de amenazas.
* Datos enviados: la URL de tu sitio y la clave de licencia (utilizadas para autenticarte y vincular la licencia a este sitio) y, para las comprobaciones de actualización, las versiones actuales de los feeds de datos de amenazas que tengas instalados.
- Telemetría opcional de uso/entorno (OPT-IN, DESACTIVADA de forma predeterminada): una instantánea anónima una vez al día utilizada para mejorar WordSec. Solo se envía después de que actives explícitamente «Compartir datos de uso y del entorno» (al activar la licencia o en Ajustes Avanzado Datos de uso) y se puede volver a desactivar en cualquier momento.
* Cuándo: una vez al día, solo mientras la opción esté activada.
* Datos enviados: una instantánea no personal del entorno del sitio (versiones del servidor, WordPress, PHP y base de datos, la lista de plugins y temas activos) y estadísticas agregadas de uso de funciones y de seguridad de WordSec. Nunca se envían contraseñas, credenciales de la base de datos, claves secretas ni direcciones de correo electrónico.
- Términos del servicio: https://wordsec.net/terms
- Política de privacidad: https://wordsec.net/privacy
Have I Been Pwned (api.pwnedpasswords.com)
Utilizado por la comprobación opcional de contraseñas filtradas para detectar si una contraseña aparece en filtraciones de datos conocidas, mediante k-anonymity.
* Cuándo: cuando un usuario establece o envía una contraseña y la comprobación de contraseñas filtradas está activada.
* Datos enviados: solo los primeros 5 caracteres del hash SHA-1 de la contraseña. La contraseña en sí y su hash completo nunca salen de tu sitio.
* Términos & privacidad: https://haveibeenpwned.com/Privacy
API de WordPress.org (api.wordpress.org, downloads.wordpress.org, wordpress.org, core.svn.wordpress.org, plugins.svn.wordpress.org, themes.svn.wordpress.org)
Se utiliza para verificar la integridad de los archivos del núcleo, plugins y temas de WordPress, para consultar información pública de plugins/temas (plugins_api/themes_api) para las puntuaciones de reputación de la cadena de suministro y las comprobaciones de integridad de actualizaciones, para descargar el paquete de idioma de la propia traducción de WordSec desde translate.wordpress.org cuando eliges un idioma de la interfaz que aún no está instalado (el mismo mecanismo que usa el propio WordPress cuando cambia el idioma del sitio) y, solo cuando haces clic en «Reparar» en un hallazgo del escáner, para descargar la copia original de un archivo modificado del núcleo/plugin/tema y poder restaurarlo. Las descargas de reparación obtienen archivos originales individuales de plugins.svn.wordpress.org / themes.svn.wordpress.org / core.svn.wordpress.org, recurriendo como alternativa a los paquetes completos de downloads.wordpress.org (zips de plugins/temas) y wordpress.org (zips de versiones del núcleo).
* Cuándo: durante los análisis de malware/integridad y las comprobaciones de reputación de la cadena de suministro, en una acción de reparación explícita y cuando guardas un idioma de la interfaz cuya traducción aún no está instalada.
* Datos enviados: la versión del núcleo de WordPress, el idioma del sitio y los slugs/versiones de los plugins/temas comprobados; para una descarga de idioma, el slug/versión del plugin y el idioma elegido.
* Términos y privacidad: https://wordpress.org/about/privacy/
RDAP (rdap.org)
Utilizado por la herramienta de búsqueda WHOIS/RDAP de la página Herramientas para mostrar información de titularidad de una dirección IP o dominio que inspecciones.
* Cuándo: solo cuando ejecutas la herramienta de búsqueda WHOIS/RDAP.
* Datos enviados: la dirección IP o el dominio que hayas elegido consultar.
* Términos & privacidad: https://about.rdap.org/
ipify (api.ipify.org)
Utilizado por el comprobador de listas negras y la herramienta de información del servidor de la página Herramientas para determinar la dirección IP pública propia de tu servidor.
* Cuándo: solo cuando ejecutas la herramienta «Comprobación de listas negras» o «IP del servidor».
* Datos enviados: una solicitud simple desde tu servidor; no se incluye ningún dato del sitio (el servicio simplemente devuelve la IP que hace la solicitud).
* Términos y privacidad: https://www.ipify.org/
Proveedores de listas de bloqueo DNS (herramienta Comprobación de listas negras)
La «Comprobación de listas negras» de la página Herramientas consulta listas de bloqueo basadas en DNS (DNSBL) para indicarte si la dirección IPv4 pública de tu servidor está incluida. Cada proveedor recibe una consulta DNS estándar que contiene la dirección IP de tu servidor en forma invertida. Se consultan cinco proveedores:
* Spamhaus ZEN (zen.spamhaus.org): https://www.spamhaus.org/privacy-notice/
* SpamCop (bl.spamcop.net), operado por Cisco: https://www.cisco.com/c/en/us/about/legal/privacy-full.html
* Barracuda Reputation Block List (b.barracudacentral.org): https://www.barracuda.com/company/legal/privacy-policy
* UCEPROTECT Level 1 (dnsbl-1.uceprotect.net): https://www.uceprotect.net/en/index.php
* PSBL (psbl.surriel.com): https://psbl.org/
Detalles:
* Cuándo: solo cuando haces clic en «Comprobación de listas negras» en la página Herramientas.
* Datos enviados: la dirección IPv4 pública de tu servidor, incrustada en cada consulta a las listas de bloqueo DNS.
Telegram Bot API (api.telegram.org)
Canal opcional de envío de alarmas. Activo solo cuando configuras tu propio token de bot e ID de chat de Telegram.
* Cuándo: cuando se dispara una alarma de seguridad que has activado y el envío por Telegram está configurado.
* Datos enviados: el texto del mensaje de la alarma (tipo de evento, nombre del sitio, contexto relevante de IP/usuario) al bot/chat que hayas configurado.
* Términos del servicio: https://telegram.org/tos
* Política de privacidad: https://telegram.org/privacy
Webhooks entrantes de Slack (hooks.slack.com)
Canal opcional de envío de alarmas. Activo solo cuando configuras tu propia URL de webhook entrante de Slack.
* Cuándo: cuando se dispara una alarma de seguridad que has activado y el envío por Slack está configurado.
* Datos enviados: el texto del mensaje de la alarma (tipo de evento, nombre del sitio, contexto relevante de IP/usuario) al webhook que hayas configurado.
* Términos del servicio: https://slack.com/terms-of-service
* Política de privacidad: https://slack.com/privacy-policy
Google reCAPTCHA (www.google.com, www.gstatic.com)
CAPTCHA opcional de inicio de sesión/registro. Activo solo cuando seleccionas reCAPTCHA y proporcionas tus propias claves.
* Cuándo: en los formularios de inicio de sesión y registro mientras esté activado.
* Cargado de forma remota: reCAPTCHA requiere que su script de widget (www.google.com/recaptcha/api.js, servido con recursos desde www.gstatic.com) se cargue desde Google en el navegador del visitante; se encola únicamente en esos formularios y solo mientras reCAPTCHA sea el proveedor seleccionado. La verificación del token es una llamada del lado del servidor desde tu sitio a www.google.com.
* Datos enviados: el token de respuesta del CAPTCHA, tu clave pública del sitio y la dirección IP del visitante.
* Términos del servicio: https://policies.google.com/terms
* Política de privacidad: https://policies.google.com/privacy
hCaptcha (hcaptcha.com, js.hcaptcha.com)
CAPTCHA opcional de inicio de sesión/registro. Activo solo cuando seleccionas hCaptcha y proporcionas tus propias claves.
* Cuándo: en los formularios de inicio de sesión y registro mientras esté activado.
* Cargado de forma remota: hCaptcha requiere que su script de widget (js.hcaptcha.com/1/api.js) se cargue desde hCaptcha en el navegador del visitante; se encola únicamente en esos formularios y solo mientras hCaptcha sea el proveedor seleccionado. La verificación del token es una llamada del lado del servidor desde tu sitio a hcaptcha.com.
* Datos enviados: el token de respuesta del CAPTCHA, tu clave pública del sitio y la dirección IP del visitante.
* Términos del servicio: https://www.hcaptcha.com/terms
* Política de privacidad: https://www.hcaptcha.com/privacy
Cloudflare Turnstile (challenges.cloudflare.com)
CAPTCHA opcional de inicio de sesión/registro. Activo solo cuando seleccionas Turnstile y proporcionas tus propias claves.
* Cuándo: en los formularios de inicio de sesión y registro mientras esté activado.
* Cargado de forma remota: Turnstile requiere que su script de widget (challenges.cloudflare.com/turnstile/v0/api.js) se cargue desde Cloudflare en el navegador del visitante; se encola únicamente en esos formularios y solo mientras Turnstile sea el proveedor seleccionado. La verificación del token es una llamada del lado del servidor desde tu sitio a challenges.cloudflare.com.
* Datos enviados: el token de respuesta del CAPTCHA, tu clave pública del sitio y la dirección IP del visitante.
* Términos del servicio: https://www.cloudflare.com/website-terms/
* Política de privacidad: https://www.cloudflare.com/privacypolicy/
ipwhois.io (ipwho.is)
Optional IP details service, disabled by default. All requests go over HTTPS with certificate verification, and none are made until you enable «External IP Lookup Service» in WordSec Settings (Visitor IP Handling section). It is used for exactly one thing: the «IP details» lookup in Live Traffic (country, region, city, ISP, organization, ASN). Traffic logging never contacts this service; country resolution during logging uses only the local GeoIP database.
* When: only while the External IP Lookup Service opt-in is enabled, and only on your click in the IP details lookup.
* Data sent: the IP address you chose to inspect.
* Terms of Service: https://ipwhois.io/terms
* Privacy Policy: https://ipwhois.io/privacy
VirusTotal (virustotal.com)
No se contacta automáticamente. El escáner muestra un enlace «Comprobar en VirusTotal» en el que puedes hacer clic para abrir VirusTotal en tu navegador para un archivo determinado.
* Cuándo: solo cuando haces clic en el enlace.
* Datos enviados: el hash del archivo contenido en la URL del enlace.
* Términos y privacidad: https://docs.virustotal.com/docs/privacy-policy
Qualys SSL Labs (ssllabs.com)
No se contacta automáticamente. La prueba «Comprobar salud SSL» de la página Herramientas se ejecuta por completo en tu propio servidor (abre una conexión TLS con tu propio dominio y lee el certificado). Junto a ella, un enlace «Análisis profundo (SSL Labs)» abre la prueba de Qualys SSL Labs en una nueva pestaña del navegador; a continuación, SSL Labs conecta con tu sitio desde el exterior y califica su configuración TLS. El enlace lleva el indicador «hide results», por lo que el informe no se publica en el tablón público de SSL Labs.
* Cuándo: solo cuando haces clic en el enlace «Análisis profundo (SSL Labs)».
* Datos enviados: el nombre de dominio de tu sitio, contenido en la URL del enlace.
* Términos: https://www.ssllabs.com/about/terms.html
* Privacidad: https://www.qualys.com/company/privacy/
Créditos
WordSec incluye las bibliotecas de terceros que se enumeran a continuación. Todas las bibliotecas se distribuyen bajo una licencia compatible con la propia licencia «GPLv2 or later» de WordSec. Cada biblioteca incluida conserva su aviso de licencia dentro del archivo o su archivo de licencia original, y el código fuente original completo (sin minificar) de cada una está disponible en el proyecto y la versión enlazados.
Bibliotecas PHP (`vendor/`)
TCPDF 6.11.3
* Licencia: LGPL-3.0-or-later
* Copyright: Nicola Asuni, Tecnick.com LTD
* Fuente: https://github.com/tecnickcom/TCPDF
* Archivo de licencia: vendor/tecnickcom/tcpdf/LICENSE.TXT
* Utilizado para: generación de informes/exportaciones en PDF
SimpleXLSXGen 1.5.x
* Licencia: MIT
* Copyright: (c) 2020-2022 Sergey Shuchkin
* Fuente: https://github.com/shuchkin/simplexlsxgen
* Archivo de licencia: vendor/shuchkin/simplexlsxgen/LICENSE
* Utilizado para: exportación a XLSX (Excel)
Bibliotecas JavaScript / CSS (`assets/*/vendor/`)
Select2 4.1.0-rc.0
* Licencia: MIT
* Copyright: Kevin Brown, Igor Vaynberg y los colaboradores de Select2
* Fuente: https://github.com/select2/select2
* Texto de la licencia: https://github.com/select2/select2/blob/master/LICENSE.md
* Archivos incluidos: assets/js/vendor/select2.min.js, assets/css/vendor/select2.min.css
ApexCharts 5.16.0
* Licencia: MIT
* Copyright: (c) 2018-2026 ApexCharts
* Fuente: https://github.com/apexcharts/apexcharts.js
* Texto de la licencia: https://github.com/apexcharts/apexcharts.js/blob/main/LICENSE
* Archivos incluidos: assets/js/vendor/apexcharts.min.js
jsVectorMap 1.7.0
* Licencia: MIT
* Copyright: (c) Mustafa Omar y los colaboradores de jsVectorMap
* Fuente: https://github.com/themustafaomar/jsvectormap
* Texto de la licencia: https://github.com/themustafaomar/jsvectormap/blob/master/LICENSE
* Archivos incluidos: assets/js/vendor/jsvectormap.min.js, assets/css/vendor/jsvectormap.min.css
* Utilizado para: visualizaciones del mapa mundial (Tráfico en vivo / Bloqueo / Firewall)
Datos del mapa mundial (world_mill), registrados como el mapa «world» de jsVectorMap
* Licencia: MIT
* Copyright: colaboradores de jvectormap-content; geometría del mapa derivada de Natural Earth (public domain)
* Fuente: https://www.npmjs.com/package/jvectormap-content
* Archivos incluidos: assets/js/vendor/world.js
* Utilizado para: la geometría de países representada por las visualizaciones del mapa mundial anteriores
qrcode-generator 1.4.4
* Licencia: MIT
* Copyright: Kazuhiko Arase
* Fuente: https://github.com/kazuhikoarase/qrcode-generator
* Texto de la licencia: https://github.com/kazuhikoarase/qrcode-generator/blob/master/LICENSE
* Archivos incluidos: assets/js/vendor/qrcode.min.js
Iconos / recursos
flag-icons (SVG de banderas de países)
* Licencia: MIT (marcado SVG); los diseños de las banderas en sí son de public domain
* Copyright: (c) 2013 Panayiotis Lipiridis
* Fuente: https://github.com/lipis/flag-icons
* Texto de la licencia: https://github.com/lipis/flag-icons/blob/main/LICENSE
* Archivos incluidos: assets/images/flags/*.svg (banderas de países, 4×3 viewBox="0 0 640 480")
Capturas








Instalación
- Sube los archivos del plugin a
/wp-content/plugins/wordsec/, o instálalo desde la pantalla de Plugins de WordPress. - Activa el plugin desde la pantalla de Plugins de WordPress.
- Abre el menú WordSec para empezar a configurar.
La activación solo crea las tablas de base de datos del plugin, los ajustes predeterminados y su propio directorio de datos. WordSec nunca modifica .htaccess, .user.ini ni wp-config.php, ni cambia los permisos de los archivos, ni instala el bootstrap del WAF previo a WordPress sin una acción explícita y claramente identificada por tu parte, y la desactivación revierte todos esos cambios.
FAQ
-
¿WordSec ralentiza mi sitio?
-
No. WordSec se ha diseñado en torno a un número mínimo de consultas a la base de datos, el procesamiento por lotes y el almacenamiento en caché inteligente, de modo que la protección no se produce a costa del rendimiento.
-
¿Necesito una clave de licencia para usar WordSec?
-
No. WordSec se instala y funciona como un plugin gratuito totalmente funcional con protección local: el firewall de aplicaciones web (tus propias reglas personalizadas más las reglas predefinidas integradas), la protección contra brute-force y de inicio de sesión, la autenticación de dos factores, el reforzamiento, la configuración del bloqueo geográfico, el registro de auditoría y más funcionan sin ninguna clave.
-
¿Requiere algún servicio externo?
-
No, no para funcionar. La protección principal de WordSec se ejecuta localmente en tu servidor y, sin clave de licencia, no contacta en absoluto con ningún servicio externo de WordSec.
-
Can WordSec help with malware removal on a hacked site?
-
Yes. The security scanner examines your files, the database and scheduled tasks, and every finding can be quarantined with one click. A modified WordPress core, plugin or theme file can also be repaired straight from its original copy on WordPress.org, and the scan history keeps a record of everything that was found and changed.
-
Does WordSec include brute force protection?
-
Yes. Failed logins are rate limited with progressive lockout, so each further attempt from the same source waits longer. You can also add a honeypot field, rename the login URL, require a CAPTCHA on the login form, and restrict logins by IP, country or time of day.
-
Does WordSec support two factor authentication?
-
Yes. Two factor authentication uses RFC 6238 TOTP codes from any standard authenticator app, and you choose which roles have to use it. For the case where a device is lost and nobody can get in, a WORDSEC_DISABLE_2FA constant in wp-config.php provides emergency access.
-
What does the web application firewall actually block?
-
The built-in rule sets cover SQL injection, cross-site scripting, path traversal, and PHP and command injection. You can add your own rules with a multi-condition builder, run the firewall in learning mode before you enforce anything, and optionally enable Extended Protection so requests are inspected before WordPress loads.
-
Can I run WordSec next to another security plugin?
-
You can, but it is not recommended. Two firewalls inspecting the same request, or two scanners walking the same files, cost you performance and produce duplicate alerts. WordSec is built to own site security end to end, so the usual path is to deactivate the others first.
-
¿Cuáles son los requisitos mínimos?
-
WordPress 6.9+, PHP 7.4+ y MySQL 5.6+ / MariaDB 10.1+.
Reseñas
Colaboradores y desarrolladores
«WordSec – Malware Scanner & Removal, Web Application Firewall (WAF), and 2FA» es un software de código abierto. Las siguientes personas han colaborado con este plugin.
Colaboradores«WordSec – Malware Scanner & Removal, Web Application Firewall (WAF), and 2FA» está traducido en 6 idiomas. Gracias a los traductores por sus contribuciones.
Traduce «WordSec – Malware Scanner & Removal, Web Application Firewall (WAF), and 2FA» a tu idioma.
¿Interesado en el desarrollo?
Revisa el código , echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.
Registro de cambios
1.1.0
- Fixed: Uninstalling the plugin with a data-removal option and later reinstalling it could permanently lock two-factor authentication users out of the login, because the stored 2FA secrets survived the uninstall while their encryption key did not. Uninstall now removes the plugin’s per-user data together with the key, and the «keep only the license key» option preserves the key material the stored license needs.
- Fixed: Uninstall left cached entries and the GeoIP/quarantine folders behind; everything under uploads/wordsec is now removed unless «keep everything» is selected.
1.0.10
- Changed: The optional ipwhois.io service is now contacted only when you open the «IP details» window in Live Traffic. Traffic logging never calls it anymore, so background visits can no longer spend the monthly lookup quota and leave the IP details window reporting «Rate limit exceeded».
- Changed: The Live Traffic log no longer stores a per-request city, and the unused city database column is removed. City is still shown in the IP details window.
- Fixed: The Blocked IP Address table loaded 25 rows after a page refresh even though 10 per page was selected. The rows-per-page choice, sorting and current page are now remembered like the other log tables, and the Clear button returns the time range to All.
- Fixed: Sorting the Alarm Log or Firewall Log table could flip the column arrow to the opposite of the order actually applied.
1.0.9
- Fixed: On sites where WordPress is installed in a subdirectory, Login URL Rename left no way in: the custom login address returned a 404 while wp-login.php and wp-admin stayed blocked. The custom address now works, and so do the /login, /admin and /dashboard shortcuts.
- Fixed: «Block Sensitive Files Access» blocked legitimate media library downloads (.zip, .sql, .log and similar) on subdirectory installations, because the exception for the uploads folder did not match. The exception now follows the real uploads location.
- Fixed: The Blackhole trap never triggered on subdirectory installations, and a request carrying a query string slipped past it everywhere.
- Fixed: The login IP and country whitelist did not cover a renamed login page on subdirectory installations.
- Fixed: Plugin and theme enumeration blocking did not run on subdirectory installations when the request reached PHP.
- Fixed: The Nginx and IIS rule examples shown for servers that ignore .htaccess now include the installation path, so they match on subdirectory installations.
- Fixed: An invalid custom login slug was silently replaced instead of reported, and on a site that had no slug yet it could become a predictable default. The value is now rejected with a message and the previous slug is kept.
- Fixed: When a stored two-factor secret could no longer be decrypted (for example after a security key rotation), login was refused even with the correct password and turning two-factor authentication off did not help. The 2FA toggle now fully disables the check, and a WORDSEC_DISABLE_2FA constant in wp-config.php provides emergency access.
- Fixed: «Hide Login Errors» no longer replaces two-factor and site-state error messages with the generic «credentials incorrect» text; only credential errors are masked.
- Improved: Two-factor secrets stored in older encryption formats are now re-encrypted to the current format in the background, so a future security key rotation can no longer invalidate them.
1.0.8
- Fixed: File Permission Hardening could make a site unreachable. It set the root .htaccess to mode 0440, which takes away read access for the web server on hosting panels where the web server runs as a different user than the file owner (Plesk, cPanel and similar). Apache then answered every request with 403 and logged «AH00529 pcfg_openfile: unable to check htaccess file». The root .htaccess is now set to 0644 so the web server can always read it, while wp-config.php still becomes read-only at 0440. Affected sites are repaired automatically the next time an admin page is opened with the option enabled.
- Fixed: The malware scanner recommended the same 0440 mode for the root .htaccess, so Fix All (and scheduled scans with automatic fixing) could re-apply it. The scanner now expects 0644 and reports a .htaccess the web server cannot read as an issue instead.
- Fixed: The Tools file permission check listed 0440 as the recommended mode for .htaccess and now recommends 0644.
- Fixed: The security score no longer expects the .htaccess file to be unreadable by the web server; only group or world write access counts against the score.
1.0.7
- Fixed: «Prevent User Enumeration» no longer blocks ordinary author pages. Only ID-based probes (such as /?author=1, which WordPress resolves into a username) are blocked; a visitor opening a known author archive like /author/name/ is served normally. The REST users endpoint and the users sitemap stay closed as before.
- Fixed: The scanner’s «View matched content» dialog showed its content box in white while dark mode was active.
- Improved: The block page shown to blocked visitors carries the WordSec wordmark with a «WordPress Security Plugin» line beneath it.
- Improved: The block screen rendered by Extended Protection (the pre-WordPress firewall) is now identical to the one WordPress serves, instead of a near-copy with an extra error code and reference line.
- Fixed: Uninstalling with «keep only the license key» now also keeps this site’s identifier, so reinstalling reuses the existing license binding instead of registering the site a second time.
1.0.6
- Nuevo: el escáner ahora informa de archivos adicionales inesperados dentro de las carpetas de plugins y temas alojados en WordPress.org (archivos que no forman parte de la versión oficial). Estos archivos son un escondite habitual de cargas maliciosas que no coinciden con ninguna firma de malware. Los hallazgos admiten cuarentena y están cubiertos por Reparar todo.
- Mejorado: la reparación de archivos de plugins y temas ahora obtiene el archivo original individual directamente desde el SVN de WordPress.org (el mismo canal que ya usan las reparaciones del núcleo) en lugar de descargar y extraer el zip completo del plugin/tema; el paquete zip se mantiene como alternativa automática.
- Corregido: la reparación de plugins y temas podía indicar «puede que el plugin no esté alojado en WordPress.org» para plugins que SÍ están alojados allí, porque el paso de extracción del zip se ejecutaba sin un sistema de archivos de WordPress inicializado.
- Corregido: los temas predeterminados incluidos con WordPress (p. ej., Twenty Twenty-Five) ya no producen falsos hallazgos de «Archivo de tema modificado». WordPress distribuye sus propias compilaciones de estos temas, que pueden diferir byte a byte de la versión del mismo tema publicada en el directorio de temas; los archivos que coinciden con las sumas de comprobación oficiales del núcleo ahora se reconocen como genuinos.
- Mejorado: la tabla del historial de análisis muestra un desglose completo por gravedad (total, crítica, alta, media, baja, informativa) al pasar el cursor sobre la columna «Problemas encontrados».
1.0.5
- Corregido: el escáner de malware ya no marca los archivos no modificados del propio WordSec. Los archivos que coinciden byte a byte con las sumas de comprobación de la versión oficial de WordPress.org para la versión de WordSec instalada se excluyen de la comparación de firmas; un archivo modificado o desconocido sigue sin superar la suma de comprobación y se analiza con normalidad.
1.0.4
- Nuevo: asistente de configuración. La primera activación ahora abre una configuración guiada paso a paso: elige una configuración recomendada, estándar o totalmente personalizada para el firewall, la seguridad de inicio de sesión, el bloqueo y los ajustes; configura el CAPTCHA, la autenticación de dos factores, el renombrado de la URL de inicio de sesión y los canales de entrega de alarmas, y termina con el paso de la licencia. Cada cambio de uso compartido de datos o de archivos del servidor se comunica antes de aplicarse, y el asistente puede volver a ejecutarse en cualquier momento desde Ajustes.
- Nuevo: la elección de qué ocurre con tus datos al desinstalar (conservarlo todo, conservar solo la clave de licencia o borrarlo todo) ahora se ofrece también en un diálogo al desactivar el plugin, además del control ya existente en Ajustes.
- Mejorado: detección y rendimiento del escáner de malware.
- Mejorado: refinamientos visuales en toda la interfaz de administración.
- Corregido: problemas conocidos comunicados desde la versión 1.0.3.
1.0.3
- WordPress 6.9 es ahora la versión mínima compatible.
- El bootstrap del WAF previo a WordPress («Protección extendida») ya no se instala en la activación. Es una opción explícita en la página Firewall que enumera todos los cambios que realiza en el servidor, y desactivarla (o desactivar el plugin) los revierte todos.
- Las funciones de reforzamiento que escriben en .htaccess, .user.ini o wp-config.php, cambian permisos de archivo o eliminan archivos ahora están desactivadas de forma predeterminada, y la descripción de cada conmutador indica exactamente qué escribe.
- La desactivación ahora restaura las constantes de depuración originales de wp-config.php y los permisos de archivo originales, y elimina todos los archivos y directivas que el plugin añadió; la desinstalación vuelve a ejecutar esta limpieza como medida de seguridad.
- La geolocalización de IP de reserva y la búsqueda de detalles de IP de Tráfico en vivo han cambiado de ip-api.com a ipwhois.io, siempre por HTTPS con verificación de certificado, y ahora cada solicitud está condicionada a una nueva opción «Servicio externo de búsqueda de IP» desactivada de forma predeterminada (Ajustes Gestión de IP de visitantes).
- Las puntuaciones de reputación de la cadena de suministro ahora funcionan por completo sin clave de licencia: los datos públicos de plugins/temas de wordpress.org se obtienen directamente cuando el mirror del servicio no está disponible.
- El cuadro de diálogo de detalles de IP de Tráfico en vivo muestra las estadísticas locales de peticiones (totales, número de bloqueadas, nivel de amenaza) incluso mientras las búsquedas externas están desactivadas.
- Página de Ajustes reorganizada: Datos de uso se ha movido a la parte superior, las opciones de idioma e interfaz se han unificado en una única tarjeta Interfaz de administración, y la sección IP de visitantes se ha renombrado a Gestión de IP de visitantes.
- Las descripciones de la página Herramientas ahora nombran los servicios externos que contacta cada herramienta (api.ipify.org, rdap.org y los proveedores de listas de bloqueo DNS).
- Documentación de servicios externos ampliada: ahora se enumeran los proveedores de listas de bloqueo DNS, todos los hosts de descarga de wordpress.org y el servicio ipwhois.io.
- Se han corregido algunos errores conocidos.
- Se han realizado mejoras visuales.
1.0.2
- Todas las funciones ahora son totalmente funcionales de forma local, sin restricciones de licencia.
- Se ha corregido un error en el escáner de malware.
- Los datos de ejecución (reglas WAF, listas de bloqueo, GeoIP, cuarentena) ahora residen en la carpeta uploads (uploads/wordsec).
- Correcciones adicionales de ubicación de archivos/directorios y de cumplimiento de las directrices de wp.org.
1.0.1
- Scripts/estilos en línea trasladados a la API de encolado de WordPress.
- Saneamiento de entradas más estricto en todo el manejo de peticiones.
- Bibliotecas incluidas actualizadas: ApexCharts 5.16.0, TCPDF 6.11.3.
- La base de datos GeoIP ahora se almacena en wp-content/wordsec-data/ en lugar de en la carpeta del plugin.
- Se ha ampliado la documentación de Servicios externos de este readme.
1.0.0
- Lanzamiento público inicial.
