Historial de versiones de Cisilino Site Defense Network, el plugin de seguridad para WordPress. Defiende el login, lleva un registro de actividad y controla la integridad de los archivos. Ofrece también endurecimientos opcionales. Aquí encuentras, para cada versión, qué ha cambiado. La versión actual es la 1.0.15.
Versión 1.0.15
- Nueva pestaña «Log de depuración». Registra los errores PHP del sitio en un archivo propio. El administrador la activa y la desactiva sin modificar
wp-config.php. Se apaga sola al terminar el tiempo elegido: 1 hora, 24 horas o 7 días. - Sin pérdida de datos. El log se añade a
debug.logy al log del servidor, y no los sustituye. Los archivos nunca se borran ni se truncan por sí solos. - Un archivo que supera el tamaño elegido, de 1 a 50 MB, se cierra y se comprime en
.zip. Antes de quitar el original, el plugin verifica el zip. Al llegar al tope de 200 MB, el log se detiene y lo avisa. - Al apagarlo, los archivos se conservan. Solo se borran desde la administración, uno a uno o todos a la vez.
- Los archivos están en una carpeta con nombre aleatorio dentro de
uploads, protegida con.htaccess. El log no se activa si la carpeta es accesible desde internet. Puedes leer las últimas 200 entradas con un filtro por nivel y descargar los archivos. - Seguridad: el bloqueo de la enumeración de usuarios (
?author=N) no funcionaba. La redirección de WordPress a/author/<nome>/se ejecutaba antes de la comprobación. Además, valores como1aoauthor[]=1la eludían. Ahora la comprobación va primero y vale para cualquier valor. - Seguridad: el bloqueo de la ejecución de PHP en
uploadsignoraba las extensiones en mayúsculas, por ejemploshell.PHP, que muchos hostings ejecutan. Tampoco cubría WordPress instalado en una subcarpeta. - Seguridad: en multisitio, los ajustes del plugin escriben el
.htaccesscompartido por toda la red. Ahora quedan reservados al super admin y no a cada administrador de subsitio. - Seguridad: el motivo de un baneo recibido desde el panel se escribe como comentario en
.htaccess. Ya no puede contener caracteres de control ni terminar en\. En Apache ese carácter prolonga la línea y anulaba la siguiente regla de bloqueo. - Límites: el log ve los errores generados tras cargar el plugin y no los suprimidos con
@. Al desinstalar, los archivos recogidos permanecen enuploads.
Versión 1.0.14
- Documentación: el readme ahora enlaza a las guías y al historial de versiones en cisilino.com. El comportamiento del plugin no cambia.
Versión 1.0.13
- Rate limiting de autores: el límite por defecto era de 3 contenidos en 5 minutos. Suspendía también a un administrador que simplemente estaba trabajando, por ejemplo importando o duplicando varias páginas seguidas. No afectaba solo a cuentas comprometidas. El nuevo valor por defecto es de 150 contenidos en 5 minutos. Aguanta un uso intenso real y sigue bloqueando a quien publica cientos de golpe. Quien ya había personalizado el valor no se ve afectado.
Versión 1.0.12
- Rate limiting de autores: ya no cuenta lo que ocurre dentro de una instalación de WordPress o en un entorno temporal con otro prefijo de tablas. Caso real: el Plugin Check crea una instalación de prueba con una entrada, una página de ejemplo y un aviso de privacidad. Suspendía al administrador que lo estaba usando. Tampoco cuentan ya los borradores automáticos, las revisiones ni los elementos de la papelera.
- Aviso en el escritorio mientras una suspensión está activa. El usuario suspendido ve el motivo y la fecha de fin. Los administradores ven la lista de usuarios suspendidos, con el enlace para revocar.
- La pestaña «Rate limiting» explica en concreto qué se cuenta y qué no. Explica también qué significa estar suspendido y cómo salir de ello.
Versión 1.0.11
- Nueva pestaña «Rate limiting» con tres salvaguardas que se pueden activar y desactivar por separado. Autores: un usuario que crea o publica más de N entradas/páginas en la ventana T queda suspendido durante S segundos. El administrador principal recibe un correo con los contenidos recientes que revisar. Visitantes (invitados): más de N comentarios o formularios de contacto en la ventana T bloquean la IP durante S segundos. El bloqueo vale solo para ese tipo de envío. El recuento se guarda en una tabla dedicada y funciona también con los comentarios desactivados. Correo obligatorio (en la pestaña Registro de usuarios): ningún usuario puede crearse sin una dirección de correo válida, por cualquier vía de creación. Cada salvaguarda tiene dos interruptores: rate limit activo sí/no y aviso por correo sí/no. El aviso de autores está activo por defecto, el de visitantes desactivado. Todos los valores N, T y S son configurables. Las suspensiones activas se listan en la pestaña, con la posibilidad de revocarlas.
Versión 1.0.10
- Corregido otro ERROR bloqueante del Plugin Check (WordPress.Security.EscapeOutput.OutputNotEscaped) que sobrevivió a la corrección anterior. El phpcs:ignore sobre el echo de varias líneas en print_idle_script() cubría solo su propia línea. No cubría las siguientes con admin_url()/wp_create_nonce()/wp_login_url(). La llamada se asigna ahora a una variable antes de la única línea de echo, que lleva el ignore completo.
Versión 1.0.9
- Corregido un ERROR bloqueante del Plugin Check oficial (PluginCheck.CodeAnalysis.Heredoc.NotAllowed). El script inline del cierre de sesión automático del admin usaba sintaxis heredoc, no admitida por las directrices de wordpress.org. Ahora es una cadena PHP normal, sin cambios de comportamiento.
Versión 1.0.8
- Corregido un error fatal (Uncaught Error: Call to undefined function get_home_path()) que podía producirse durante un intento de login fallido. Csdn_Htaccess::htaccess_path() cargaba por error wp-admin/includes/misc.php en lugar de wp-admin/includes/file.php, el archivo que realmente define get_home_path(). En un contexto de administración el error fatal quedaba invisible, porque la función ya estaba disponible por otra vía. En wp-login.php, en cambio, podía bloquear el acceso al sitio con un error fatal. El plugin solo tenía que registrar el intento.
Versión 1.0.7
- Seguridad: corregida una condición de carrera en la detección de fuerza bruta (Csdn_Detector::on_login_failed). Permitía esquivar el umbral local de bloqueo enviando en paralelo intentos de login fallidos para la misma IP. El contador es ahora un upsert atómico (INSERT … ON DUPLICATE KEY UPDATE), no ya una lectura y una escritura separadas.
Versión 1.0.6
- Nueva pestaña «Paranoic Hardening»: cabeceras de seguridad HTTP opcionales (X-Content-Type-Options, X-Frame-Options, Referrer-Policy, HSTS). Están todas desactivadas por defecto y se aplican a través de WordPress (send_headers), no de .htaccess. Funcionan por tanto también sin mod_headers.
- HSTS está protegido por una guarda explícita. La activación se rechaza si la petición de guardado no llega en https. Así se evita enviar una cabecera que dejaría el sitio inaccesible a quien la reciba, si el sitio dejara de ser siempre https.
- Cada opción tiene una explicación integrada justo debajo del control correspondiente. Dice qué hace, cuándo es segura y qué puede romper.
- Nueva autocomprobación «Verificar cabeceras de seguridad»: una petición real a la página de inicio para comprobar qué cabeceras llegan de verdad en la respuesta. Es útil cuando una CDN o un proxy inverso previo las quita en tránsito.
- Paranoic Hardening: nuevo cierre de sesión automático de los administradores por inactividad, desactivado por defecto. El tiempo de espera es configurable en segundos (60-86400). Se mide en el navegador (ratón, teclado, desplazamiento, compartido entre pestañas), no en el servidor. Así las peticiones automáticas de WP Heartbeat no se confunden con actividad real. Al vencer el tiempo, la sesión se cierra de verdad con wp_logout(), no con una simple redirección visual.
Versión 1.0.5
- Reorganización del panel: nuevas pestañas dedicadas «IP bloqueadas» (con filtro JavaScript en el cliente), «Hardening / IDS» y «Test» (comprobación del bloqueo de PHP en uploads + integridad). Están separadas de la pestaña General.
Versión 1.0.4
- Bloqueo de la ejecución de PHP en uploads: cubiertas también las extensiones .phar/.phps/.pht. Antes solo se cubrían .php/.phpN/.phtml.
- Eliminada la directiva php_admin_flag de la regla de bloqueo. En hosting PHP-FPM/CGI con Apache la rechaza con un error 500 en todo el sitio. Require all denied solo ya es suficiente.
- Añadida una autocomprobación desde el panel para verificar que el bloqueo funciona de verdad en el sitio. Ya no se confía solo en la configuración guardada.
Versión 1.0.3
- Seguridad: corregida una validación insuficiente de las direcciones IP recibidas del panel. Una respuesta manipulada podía insertar directivas arbitrarias en el .htaccess del sitio. Ahora solo se aceptan direcciones IP y CIDR completos, tanto en la recepción como en el último control antes de escribir el archivo. Ninguna fuente de IP puede ya saltárselo, incluidos los ajustes locales.
- Seguridad: la conexión con el panel exige ahora https. La petición de sincronización lleva la clave API. En http podía leerla cualquiera que estuviera en la ruta de red. http sigue permitido solo hacia hosts de desarrollo local.
- Seguridad: la vigilancia de las subidas reconoce ahora .user.ini, que en PHP-FPM equivale a un .htaccess. Reconoce también los archivos SVG y los nombres construidos con bytes nulos o espacios finales para disimular una extensión ejecutable.
- Nuevo tope de filas del registro de actividad, 500 por defecto y configurable en Ajustes > Registro de actividad. Limita el espacio en disco que ocupa el registro. El registro crece también por efecto de peticiones no autenticadas (logins fallidos, comentarios, envíos de archivos). Al subir el tope, la página avisa del mayor consumo.
- Corregido un defecto por el que la retención no borraba nunca nada, con el registro de actividad encendido pero sin panel configurado. Las filas quedaban a la espera de una entrega a un destinatario inexistente. La tabla crecía sin límite.
- Las rutas personalizadas de las reglas de endurecimiento ahora se limpian antes de escribirse. Comillas y caracteres de control nunca llegan al .htaccess, que de otro modo podía quedar no válido. Antes la personalización no se filtraba lo suficiente. Una ruta mal escrita podía dejar el sitio inaccesible. Se eligió descartar esos caracteres en silencio al escribir la regla, para proteger al usuario de errores. En el campo se quedan como se escribieron, pero no tienen efecto.
Versión 1.0.2
- Nueva sección «Registro de usuarios» (Ajustes): tres políticas para limitar la creación de nuevos usuarios de WordPress. Las políticas son: ninguna restricción, solo roles de bajo privilegio o registro excluido por completo. Con los roles de bajo privilegio nunca se crean administrator, editor, author ni shop_manager. Se aplica siempre, incluso en caso de error de configuración. Está ACTIVA POR DEFECTO en «solo roles de bajo privilegio»: los roles de alto privilegio ya están bloqueados nada más instalar, sin necesidad de configuración. La política cubre wp-admin, la API REST, XML-RPC, WP-CLI y las llamadas directas de plugins/temas de terceros. Usa el filtro central de WordPress, por el que pasa toda vía de creación de usuarios. Hay además una red de seguridad: revoca de inmediato los permisos de una cuenta creada mientras la política estaba activa, sea cual sea la vía de entrada.
Versión 1.0.1
- Limpieza del readme: el changelog recoge solo las versiones publicadas en el repositorio oficial.
Versión 1.0.0
- Primera versión pública.
- Defensa del login: detección de intentos fallidos, bloqueo local de las IP molestas en .htaccess, lista blanca y desbloqueo manual desde los ajustes.
- Red Cisilino: intercambio opcional de un resumen de IP hostiles con el panel y con los demás sitios de la red. Está desactivado hasta que se configure la conexión.
- Registro de actividad: los eventos relevantes del sitio se registran en local con retención configurable. Son accesos, usuarios, contenidos, plugins, temas, núcleo, opciones, medios y subidas. Se envían al panel justo después del evento, sin ralentizar la página servida.
- Verificación de integridad: el plugin compara los hashes MD5 de sus propios archivos con el manifiesto distribuido en la versión. Señala archivos modificados, ausentes o no previstos en su propia carpeta.
- Vigilancia de las subidas: registra los archivos que entran en el sitio incluso fuera de la biblioteca de medios. Reconoce las extensiones ejecutables, incluidas las dobles extensiones como image.php.jpg, y puede rechazarlas.
- Endurecimientos opcionales, todos desactivados por defecto.
Las versiones anteriores a la 1.0.0 nunca se distribuyeron públicamente. Para las funciones en detalle, empieza por el artículo de presentación del plugin.