📤 Visión General — Subidas
La pestaña Subidas protege tu WordPress contra uno de los vectores de ataque más críticos: la subida de archivos maliciosos. Un atacante que consigue subir un archivo PHP puede ejecutar código arbitrario, instalar backdoors, robar datos o tomar el control completo del sitio.
🎯 ¿Qué bloquea?
- PHP Archivos .php, .phtml, .php5, .php7, .pht
- EJECUTABLES .exe, .bat, .cmd, .sh, .bin, .msi
- SCRIPTS .js, .vbs, .jsp, .asp, .aspx, .shtml
- DOBLE EXT. imagen.jpg.php, archivo.pdf.exe
- NULL BYTE archivo.php%00.jpg
- TAMAÑO Archivos que excedan el límite configurado
🔍 Ejemplos de ataque reales
📋 Extensiones Bloqueadas y Tipos MIME
El firewall mantiene una lista de más de 30 extensiones peligrosas bloqueadas por defecto. Es un campo de texto libre separado por comas: puedes añadir o quitar extensiones según las necesidades de tu sitio. También puedes configurar límites de tamaño máximo y personalizar la lista de tipos MIME bloqueados.
| Categoría | Extensiones Bloqueadas por Defecto |
|---|---|
| PHP | .php .php3 .php4 .php5 .php7 .phtml .pht .phps .phar .pgif |
| EJECUTABLES | .exe .bat .cmd .com .pif .scr .msi .app .deb .rpm |
| SCRIPTS | .js .ws .wsh .vbs .ps1 .sh .shtml .cgi .pl .py .jar |
📏 Tamaño máximo de archivo
Configura el límite en MB (10MB por defecto). Si pones 0, se usa el límite general de subidas de tu WordPress/hosting, regulado por upload_max_filesize y post_max_size en php.ini.
🚫 Tipos MIME bloqueados
Lista editable de tipos MIME que serán rechazados automáticamente. Por defecto incluye: application/x-php, application/x-httpd-php, text/php, application/x-executable, text/x-php. Puedes añadir más tipos según lo que necesites bloquear.
🔬 Protección Avanzada
Las tres opciones avanzadas proporcionan capas adicionales de análisis que detectan técnicas de evasión comunes que los atacantes usan para saltarse las listas de extensiones.
🔍 Escanear contenido del archivo
Inspecciona el contenido real del archivo en busca de firmas de código malicioso. Detecta PHP escondido dentro de imágenes (GIF malicioso), scripts embebidos, ofuscación, y otras técnicas de camuflaje. No se fía solo de la extensión o el MIME declarado — examina los bytes reales.
🔗 Detectar doble extensión
Detecta archivos con múltiples extensiones como imagen.jpg.php o documento.pdf.exe. Los atacantes usan esta técnica porque algunos sistemas solo validan la última extensión (engañando a validaciones básicas), pero el servidor ejecuta la primera extensión peligrosa. También detecta variantes como file.php;.jpg o file.php..jpg.
💉 Detectar null byte injection
El atacante añade un carácter null byte (%00) en el nombre del archivo para truncar la extensión a nivel del sistema de archivos. Por ejemplo, shell.php%00.jpg — el sistema ve .jpg y lo permite, pero el servidor guarda shell.php porque el sistema de archivos trunca en el null byte.
The attacker adds a null byte character (%00) in the filename to truncate the extension at the filesystem level. For example, shell.php%00.jpg — the system sees .jpg and allows it, but the server saves shell.php because the filesystem truncates at the null byte.
⭐ Recomendaciones y Buenas Prácticas
Sigue estas recomendaciones para maximizar la protección de subidas sin afectar la funcionalidad de tu sitio.
📏 Límites de tamaño recomendados
🖼️ Imágenes
10 MB — Suficiente para fotos de alta resolución en sitios de cartera, galerías o WooCommerce. Rara vez una imagen legítima supera este tamaño.
🎥 Videos / PDFs
50 MB — Adecuado para vídeos cortos, presentaciones y documentos PDF grandes. Si necesitas más, considera streaming externo (YouTube, Vimeo).
📦 Archivos comprimidos
25 MB — Para archivos .zip, .rar, .tar.gz. Desconfía de archivos comprimidos muy grandes — suelen contener contenido malicioso empaquetado.
📋 Reglas de oro
- Mantén las 3 opciones avanzadas ACTIVADAS — Análisis de contenido, doble extensión y null byte. Son tu última línea de defensa contra evasiones.
- No elimines extensiones de la lista sin motivo — Cada extensión bloqueada es un vector de ataque cerrado. Si necesitas una, evalúa el riesgo y considera alternativas más seguras.
- Revisa el registro de actividad periódicamente — Los últimos 20 intentos de subida bloqueados aparecen en el log. Revisarlos te ayuda a identificar patrones de ataque y ajustar la configuración.
- Combínalo con seguridad a nivel de servidor — La protección de subidas funciona a nivel de aplicación WordPress. Para máxima seguridad, combínala con reglas del servidor web (bloquear ejecución PHP en wp-content/uploads mediante .htaccess o Nginx).
📊 Registro de Actividad (Activity Log)
El panel muestra los últimos 20 intentos de subida bloqueados, cada uno con las siguientes columnas:
| Columna | Descripción |
|---|---|
| Hora | Marca de tiempo del intento |
| Archivo | Nombre del archivo intentado |
| Razón | Badge con el motivo del bloqueo |
| Acción | Si el intento se bloqueó (firewall en modo Protección/Strict) o solo se registró (modo Monitoreo) |
| IP | Dirección IP del origen de la subida |
| Rol | Rol del usuario de WordPress que intentó la subida |
Los badges de razón pueden ser:
🆚 Protección de subidas vs. Seguridad a nivel de servidor
Es importante entender la diferencia entre ambas capas. No son excluyentes — al contrario, se complementan.
| Aspecto | Protección de Subidas (SeenSecure) | Seguridad del Servidor (.htaccess / Nginx) |
|---|---|---|
| Nivel | Aplicación WordPress (PHP) | Servidor web (Apache / Nginx) |
| Qué protege | Bloquea subidas maliciosas antes de que se guarden en el servidor. Analiza extensión, MIME, contenido, doble extensión, null byte. | Bloquea la ejecución de archivos en directorios específicos. No evita la subida, pero sí impide que se ejecuten como PHP. |
| Ventaja | Detección inteligente: contenido, evasiones. Configurable desde el panel de WordPress. | Funciona aunque WordPress esté comprometido. No depende de PHP. |
| Recomendación | Usar ambas. La protección de subidas bloquea el 99% de los ataques. La seguridad a nivel de servidor es la red de seguridad que atrapa el 1% restante si algo falla. | |
<script> o onload). Si necesitas subir SVGs para iconos, puedes eliminarlos de la lista, pero considera sanitizarlos antes o usar un plugin que limpie SVGs automáticamente.