SeenSecure Help

Protección de Subidas (Uploads)

Bloquea archivos maliciosos antes de que lleguen al servidor: extensiones peligrosas, MIME inválidos, doble extensión, inyección null byte y análisis de contenido.

📤 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é tipos de ataque se previenen? PHP execution remota, backdoors persistentes, robo de datos (wp-config, usuarios), abuso del servidor (minado de criptomonedas, spam), desfiguración del sitio y escalada de privilegios.

🎯 ¿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

# Subir un shell PHP para tomar el control shell.php → acceso remoto al servidor
# Ocultar PHP en una imagen subida al avatar avatar.php (con cabecera GIF) → backdoor persistente
# Doble extensión para engañar a WordPress imagen.jpg.php → se ejecuta como PHP
# Null byte injection para truncar la extensión shell.php%00.jpg → el servidor ignora .jpg

📋 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
💡 Lista personalizable: Estas son las extensiones que vienen bloqueadas de fábrica. Puedes añadir otras que quieras bloquear expresamente (por ejemplo .htaccess, .sql o .svg) o quitar alguna que tu sitio necesite subir con normalidad —el campo es un texto libre que editas tú mismo.

📏 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.

💡 Personalización: Si tu sitio sube tipos de archivo legítimos que están siendo bloqueados (ejemplo: archivos .svg para iconos), puedes eliminar esa extensión de la lista. Sin embargo, revisa los riesgos de seguridad primero.

🔬 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.

✅ Recomendación: Mantén las 3 opciones avanzadas ACTIVADAS. Son ligeras, no afectan el rendimiento y cierran vectores de ataque bien conocidos. Sin ellas, un atacante puede evadir la lista de extensiones con técnicas simples.

⭐ 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

  1. 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.
  2. 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.
  3. 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.
  4. 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:

Extensión bloqueada MIME bloqueado Tamaño excedido Doble extensión Byte nulo Contenido malicioso
🔍 Interpreta el log: Si ves muchos bloqueos por extensión bloqueada desde la misma IP, probablemente es un ataque automatizado. Bloqueos por tamaño excedido pueden ser usuarios legítimos — considera ajustar el límite. Bloqueos por byte nulo o contenido malicioso son casi siempre ataques dirigidos.

🆚 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.
📌 Nota sobre SVG: Los archivos .svg están en la lista bloqueada porque pueden contener JavaScript inline (<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.