Repository navigation
v0.4.4
Nuevo: Rutas trampa (#8)
Rutas que ningún visitante legítimo pide pero que todo scanner automatizado prueba (/.env, copias de wp-config.php, /.git/, /.aws/, /phpinfo.php, /vendor/phpunit/). Quien pide una queda bloqueado de inmediato y por 24 horas, sin pasar por la puntuación de riesgo: la señal es inequívoca.
WPS_Honeypot(nuevo): corre en la Capa 1, antes de que WordPress procese la ruta, para las peticiones sin cookie de sesión. En la Capa 2 se vuelve a revisar con los permisos reales del usuario: un usuario con permisos de edición nunca se bloquea a sí mismo, y una cookie de sesión falsa no alcanza para esquivar la trampa. La whitelist y el propio servidor también quedan exentos.- Ajustes en Configuración → Firewall Avanzado: activar o desactivar (activado por defecto), la lista de rutas (una por línea; se compara el final de la ruta sin distinguir mayúsculas, y un
*final abarca todo lo que haya debajo) y la duración del bloqueo. - Nuevo tipo de evento «Ruta trampa» (crítico) y tipo de bloqueo
auto_honeypot. En IPv6 se bloquea la red del prefijo configurado, como el resto de los bloqueos automáticos. - Bloqueos: la lista muestra ahora etiquetas legibles también para los bloqueos por crawler falso, motor de riesgo y reglas personalizadas, que antes aparecían con su clave interna.
Nuevo: Campo trampa y tiempo mínimo en login y comentarios (#9)
Frena bots en wp-login.php, wp_login_form() y los comentarios, sin captcha ni servicios externos.
WPS_Form_Guard(nuevo): agrega a los formularios un campo oculto (a la vista y a lectores de pantalla) que los bots completan y un humano no, y la hora de carga firmada con HMAC. Un envío con el campo trampa completo o más rápido que el mínimo se rechaza, y se registra el nuevo evento «Bot en formulario».- Comentarios: tiempo mínimo de 3 segundos por defecto. Un comentario sin los campos del plugin (un bot que postea directo, o una página cacheada desde antes de activar la función) va a la cola de spam en lugar de rechazarse, así no se pierde ningún comentario legítimo. Trackbacks y pingbacks no se revisan.
- Login: el tiempo mínimo viene desactivado, porque los gestores de contraseñas con envío automático completan el formulario en menos de un segundo; el campo trampa sí está activo. Un login sin los campos del plugin se deja pasar, porque los formularios de login de temas y plugins (por ejemplo, el de WooCommerce) no usan los hooks estándar. El rechazo cuenta como login fallido para el límite de intentos.
- Exenciones: usuarios logueados (en comentarios), whitelist, el propio servidor, y todo mientras el Modo Inseguro o
WPS_DISABLE_BLOCKINGestén activos. No se bloquea la IP, sólo el envío. - Ajustes en Configuración → Firewall Avanzado: activar o desactivar (activado por defecto) y los tiempos mínimos de comentarios y login.
Seguridad: Recuperación de contraseña y registro sin límite, y mensajes que revelaban cuentas (#10)
El formulario de recuperación de contraseña y el de registro no tenían límite: servían para inundar de mails a los usuarios y para crear cuentas basura en masa. Además, los propios mensajes de WordPress permitían saber qué cuentas existen: el login respondía «The username X is not registered on this site» o «The password you entered for the username X is incorrect», y la recuperación, «There is no account with that username or email address».
- Límites por cliente (Configuración → Rate Limiting): 5 recuperaciones de contraseña y 3 registros por hora. Al superarlos se rechaza el pedido, pero no se bloquea la IP: quien olvidó su contraseña y apretó el botón varias veces sigue pudiendo usar el sitio.
WPS_Rate_Limiter::exceeds()(nuevo) cuenta sin bloquear. - Mensajes uniformes (con «Bloquear enumeración de usuarios» activo, el valor por defecto):
- Login: los errores de usuario inexistente, email inexistente y contraseña incorrecta se reemplazan por un único mensaje (filtro
wp_login_errors). Los demás errores, como un campo vacío, se mantienen. - Recuperación de contraseña: si la cuenta no existe, se responde igual que si existiera, con la redirección a «revisá tu correo».
- Login: los errores de usuario inexistente, email inexistente y contraseña incorrecta se reemplazan por un único mensaje (filtro
- Alcance: aplica a
wp-login.phpy al registro de WordPress. Los formularios propios de otros plugins (por ejemplo, la cuenta de WooCommerce) muestran sus propios mensajes.
Nuevo: Límite de búsquedas (#11)
Cada búsqueda del sitio es una consulta cara a la base de datos que ninguna cache de páginas absorbe, porque cada término es distinto: un script que busca términos al azar satura el servidor con muy pocas peticiones.
WPS_Search_Guard(nuevo): cuenta las búsquedas por cliente, en el buscador del sitio (?s=) y en la REST API (/wp/v2/searchy cualquier ruta con el parámetrosearch). El control corre antes de que WordPress ejecute la consulta (parse_requestyrest_pre_dispatch), así que una búsqueda rechazada no llega a la base de datos.- Límite de 20 búsquedas por minuto (Configuración → Rate Limiting,
0lo desactiva). Al superarlo se responde 429 conRetry-After: 60, sin bloquear la IP: el visitante puede seguir navegando. - Quedan exentos quienes editan el sitio, la whitelist, el propio servidor, y todo mientras el bloqueo esté suspendido.
Versión
- Versión actualizada a
0.4.4en la cabecera del plugin, la constanteWPS_VERSIONy el MU-plugin. Al actualizar, la migración completa los ajustes nuevos (rutas trampa, protección de formularios y los límites de búsqueda, recuperación de contraseña y registro) con sus valores por defecto.