Protección de Uploads: Controla Qué Entra
La carpeta /uploads es donde se guardan imágenes, documentos y archivos que suben los usuarios. Es punto de entrada perfecto para atacantes porque:
- Es accesible públicamente
- Muchos usuarios pueden subir archivos
- Si no está protegida, un usuario puede subir un archivo .php que se ejecuta
Upload Protection de SeenSecure verifica CADA archivo que se sube: su tipo, tamaño, contenido. Si algo sospechoso se detecta, siempre se registra en el log y, si el firewall está en modo de bloqueo, además se rechaza al instante.
Amenazas Contra Uploads
1. Subida de Archivos Ejecutables
Atacante sube archivo .php que, cuando accedido, ejecuta código malicioso.
upload.php → contiene código PHP → atacante ejecuta comandos en tu servidor
2. Cambio de Extensión
Atacante sube .php pero lo renombra a .jpg para pasar validaciones básicas.
malware.php → renombrado a → photo.jpg (pero sigue siendo PHP)
3. Polimorfismo
Malware que muta su código para evadir detección antivirus. Cada copia es diferente.
4. Archivo ZIP Bomba
Archivo comprimido que contiene 1000GB de datos. Cuando se descomprime, usa todo el almacenamiento del servidor.
5. Inyección de Metadatos
Malware insertado en metadatos de imagen (EXIF). Si WordPress procesa la imagen sin sanitizar, ejecuta código.
| Tipo de Ataque | Peligrosidad | Detección |
|---|---|---|
| Upload .php directo | ⭐⭐⭐⭐⭐ | Muy fácil |
| Extensión falsa | ⭐⭐⭐⭐ | Fácil |
| Polimorfismo | ⭐⭐⭐ | Difícil |
| Metadatos | ⭐⭐⭐ | Muy difícil |
¿Qué Protege Upload Protection?
Cada archivo que se sube a tu WordPress pasa por 6 comprobaciones independientes antes de guardarse —si falla cualquiera de ellas, el intento se registra y, con el firewall en modo de bloqueo, se rechaza—. No es una lista blanca que solo permita ciertos formatos, sino una lista negra configurable de lo peligroso, combinada con verificaciones que examinan el contenido real del archivo, no solo su nombre. Para cada capa explicamos para qué sirve, por qué la usa un atacante y cómo actúa SeenSecure para detenerla.
1. Límite de Tamaño de Archivo
Para qué sirve esta protección: cada archivo subido consume espacio en el disco de tu servidor. Sin un límite, cualquier usuario con permiso para subir archivos —o un formulario público mal protegido, como el de un plugin de contacto o de comentarios con adjuntos— podría enviar archivos desproporcionadamente grandes, agotando el almacenamiento disponible o manteniendo el servidor ocupado mientras procesa la subida.
Por qué lo intenta un atacante: subir archivos de tamaño desproporcionado es una forma sencilla de ataque de denegación de servicio (DoS): llenar el disco hasta que WordPress ya no pueda escribir nada más —ni siquiera guardar un post o generar una copia de seguridad— o forzar al servidor a dedicar recursos a procesar archivos gigantes de forma repetida.
Ejemplo real: un formulario de subida de avatar, pensado para imágenes de unos pocos cientos de KB, recibe un archivo de 800MB enviado repetidamente desde varias IPs. Sin límite de tamaño, cada intento se acepta y se procesa hasta agotar el espacio en disco.
Cómo funciona: SeenSecure compara el tamaño del archivo recibido contra un límite único en megabytes que tú configuras (10MB por defecto, aplicado a cualquier tipo de archivo). Si lo supera, el intento se registra y, cuando el firewall está en modo de bloqueo, la subida se rechaza sin llegar a guardarse de forma permanente en tu biblioteca de medios.
2. Extensiones Bloqueadas (Lista Negra)
Para qué sirve esta protección: la extensión de un archivo (.php, .exe, .jpg...) le indica al servidor cómo tratarlo. Algunas extensiones —sobre todo las que un servidor con PHP sabe ejecutar como código— son peligrosas si terminan dentro de una carpeta pública como /wp-content/uploads: si alguien accede directamente a esa URL, el servidor no se limita a mostrar el archivo, lo ejecuta.
Por qué lo intenta un atacante: si un atacante logra subir un archivo con extensión ejecutable (típicamente .php) a una carpeta accesible públicamente, obtiene lo que en seguridad se llama una "web shell": un punto de entrada permanente desde el que puede ejecutar comandos, leer y modificar archivos, o instalar más malware, sin necesitar volver a autenticarse en WordPress.
Ejemplo real: un atacante intenta subir un archivo llamado shell.php a través de un formulario de subida de documentos. SeenSecure compara su extensión contra la lista de extensiones bloqueadas —que incluye variantes como .php3, .phtml y .phar además de ejecutables como .exe, .sh y .bat— y rechaza la subida antes de que el archivo llegue a guardarse.
Cómo funciona: a diferencia de una lista blanca (que solo permitiría ciertas extensiones y bloquearía todo lo demás), SeenSecure usa una lista negra configurable de extensiones peligrosas conocidas —PHP en sus variantes, ejecutables, scripts de servidor— que puedes personalizar añadiendo o quitando extensiones desde el panel según lo que tu sitio necesite subir. Quitar las extensiones ejecutables de la lista por defecto no es recomendable salvo que sepas exactamente lo que haces.
3. Tipos MIME Bloqueados y Verificación Real del Contenido
Para qué sirve esta protección: la extensión de un archivo es solo una etiqueta en el nombre —cualquiera puede renombrar malware.php a foto.jpg sin que su contenido cambie ni un byte. El tipo MIME describe qué es realmente el archivo, y verificarlo evita que uno se cuele solo por llevar la etiqueta "correcta" en el nombre.
Por qué lo intenta un atacante: renombrar la extensión es el primer truco que prueba cualquier atacante al descubrir que hay extensiones bloqueadas —es rápido, no requiere conocimientos avanzados, y funciona contra sistemas que solo miran el nombre del archivo sin examinar lo que hay dentro.
Ejemplo real: un archivo llamado imagen.gif se sube con el tipo MIME que declara el navegador (image/gif), pero al examinar sus primeros bytes reales el servidor determina que en realidad es application/x-php. SeenSecure detecta la discrepancia y rechaza el archivo, aunque el nombre y la cabecera declarada parecieran inofensivos.
Cómo funciona: SeenSecure aplica dos comprobaciones relacionadas: compara el tipo MIME declarado en la subida contra su lista de tipos bloqueados, y además usa una verificación a nivel de sistema (a través de la librería fileinfo de PHP) que examina el contenido real del archivo para determinar su tipo verdadero, independientemente de lo que diga su nombre o su cabecera declarada. Si ese tipo real coincide con uno bloqueado, WordPress rechaza el archivo aunque su extensión pareciera inofensiva.
4. Escaneo de Contenido
Para qué sirve esta protección: incluso un archivo con extensión y tipo MIME aparentemente correctos puede llevar código malicioso oculto en su interior —por ejemplo, código PHP añadido al final de una imagen válida, de forma que el archivo se siga viendo como imagen normal y, a la vez, sea interpretable como script si alguien logra que el servidor lo ejecute. El escaneo de contenido añade una última capa que examina lo que hay realmente dentro del archivo.
Por qué lo intenta un atacante: combinar un archivo legítimo (una imagen que se ve y carga con normalidad) con código ejecutable escondido permite superar controles superficiales de extensión y tipo declarado, y solo se revela como malicioso si el atacante consigue, mediante otra vulnerabilidad, que el servidor lo interprete como código en vez de mostrarlo como imagen.
Ejemplo real: un archivo foto.jpg supera las comprobaciones de extensión y MIME porque su cabecera es una imagen válida, pero contiene además una etiqueta <?php seguida de una función capaz de ejecutar comandos del sistema. SeenSecure lee el contenido del archivo, encuentra ese fragmento y lo rechaza.
Cómo funciona: SeenSecure examina el contenido del archivo subido buscando patrones característicos de código ejecutable malicioso —funciones y estructuras que no tienen ningún motivo legítimo para aparecer dentro de una imagen, un PDF o un documento normal. No es un antivirus con firmas de virus conocidos ni un entorno de ejecución aislado ("sandbox"): es un análisis del contenido en busca de fragmentos sospechosos, sin llegar nunca a ejecutar el archivo.
5. Detección de Extensión Doble
Para qué sirve esta protección: algunos servidores mal configurados, al ver un nombre de archivo como imagen.jpg.php, procesan solo la última extensión que reconocen —y si esa parte final es .php, lo ejecutan como código PHP sin importar que el resto del nombre "aparente" ser una imagen. Esta protección detecta ese patrón de nombre sospechoso.
Por qué lo intenta un atacante: el truco de la extensión doble intenta confundir tanto a sistemas de validación básicos (que solo miran si el nombre "contiene" .jpg en algún punto) como a la propia configuración del servidor, apostando a que este ejecute la extensión final real (.php) mientras el nombre visualmente parece un archivo de imagen inofensivo.
Ejemplo real: un atacante nombra su archivo backdoor.jpg.php. Un filtro ingenuo que solo comprueba si el nombre "contiene" .jpg lo dejaría pasar; SeenSecure divide el nombre completo por sus puntos y comprueba cada fragmento intermedio contra la lista de extensiones peligrosas, detecta el .php y rechaza el archivo.
Cómo funciona: SeenSecure analiza el nombre completo del archivo, no solo su extensión final, buscando cualquier extensión peligrosa conocida en cualquier posición del nombre —no solo al final— para detectar este tipo de camuflaje antes de que el archivo se guarde.
6. Detección de Byte Nulo
Para qué sirve esta protección: el byte nulo es un carácter especial que, en muchos lenguajes de programación de bajo nivel, significa "fin de la cadena de texto". Es una técnica antigua pero todavía efectiva contra código mal escrito para engañar a la validación de nombres de archivo, haciendo que el sistema "vea" un nombre distinto al que realmente se usa al guardar el archivo.
Por qué lo intenta un atacante: insertando un byte nulo entre la parte ejecutable de un nombre de archivo y una extensión aparentemente inofensiva, un atacante intenta que la validación se detenga en la extensión "segura" (todo lo que hay antes del byte nulo) mientras el sistema de archivos subyacente sigue procesando el nombre completo, incluida la extensión real y peligrosa que va después.
Ejemplo real: un archivo se nombra shell.php%00.jpg (o su equivalente con el byte nulo real en vez de su representación de texto). Un validador vulnerable que se detiene en la primera extensión que "ve" lo trataría como .jpg inofensivo; SeenSecure detecta la presencia del byte nulo en el nombre y lo rechaza directamente.
Cómo funciona: SeenSecure comprueba si el nombre del archivo contiene un byte nulo, tanto en su forma binaria real como en su representación de texto (%00), y rechaza cualquier subida que lo contenga, sin necesidad de interpretar qué extensión "gana" en un sistema mal configurado.
Cómo Configurar Upload Protection
Paso 1: Activar Protección
SeenSecure > Firewall > pestaña "Subidas" > activa "Habilitar Protección de Subidas"
Paso 2: Revisar y Personalizar las Extensiones Bloqueadas
Por defecto, la lista ya incluye las extensiones más peligrosas (variantes de PHP, ejecutables, scripts de servidor) en un campo de texto separado por comas que puedes editar libremente. No es una lista de "lo único permitido": cualquier extensión que no esté en esta lista se sigue aceptando con normalidad, así que solo tiene sentido añadir aquí formatos que sepas que no necesitas y quieras bloquear expresamente.
Paso 3: Establecer el Límite de Tamaño
Es un único límite en megabytes que se aplica a cualquier archivo subido, sin distinción por tipo. El valor por defecto es 10MB; poner 0 hace que se use en su lugar el límite general de subidas de tu WordPress/hosting. Ajusta el número según lo que realmente subas a tu sitio (por ejemplo, súbelo si necesitas aceptar vídeos o PDFs grandes).
Paso 4: Activar las Capas Avanzadas
- Escanear contenido del archivo: busca código PHP, JavaScript y patrones maliciosos dentro de los archivos, aunque su extensión y tipo declarado parezcan inofensivos.
- Detectar extensión doble: bloquea archivos como
imagen.jpg.php. - Detectar byte nulo: bloquea archivos con byte nulo en el nombre, una técnica de bypass clásica.
Recomendación: las 3 vienen activadas por defecto y conviene mantenerlas así — cada una cubre un ángulo distinto de ataque que las demás capas no cubren por sí solas.
Paso 5: Entender el Modo del Firewall (Monitoreo vs. Bloqueo)
Upload Protection no tiene su propio interruptor de "rechazar / poner en cuarentena / notificar": su comportamiento ante una violación depende del modo general del Firewall (SeenSecure > Firewall > Modo). En Monitoreo, cada intento sospechoso se registra en el log pero el archivo se acepta igualmente. En Protección o Strict, el archivo se rechaza en el momento. Si activas Upload Protection pero el firewall global sigue en Monitoreo, verás los intentos en el registro sin que ninguno se bloquee de verdad — revisa ambos ajustes juntos.
Paso 6: Revisar el Registro de Actividad de Subidas
La misma pestaña de Protección de Subidas incluye una tabla con las últimas subidas rechazadas o registradas: hora, nombre del archivo, motivo (extensión bloqueada, MIME bloqueado, extensión doble, byte nulo, contenido malicioso o tamaño excedido), si se bloqueó o solo se monitorizó, la IP de origen y el rol del usuario. Un botón "Limpiar log" permite vaciar ese historial cuando quieras.
Mejores Prácticas
Para Administradores
- Mantén lista de extensiones permitidas lo más pequeña posible
- Revisa semanalmente los uploads rechazados (SeenSecure > Firewall > pestaña Subidas)
- Si hay muchos rechazos legítimos, ajusta configuración (no la desactives)
- Educa usuarios: No todos entienen por qué se rechaza un archivo
Para Usuarios
- Si tu archivo se rechaza, es por razón de seguridad
- Si necesitas subir ese tipo de archivo, contacta al admin
- Comprime imágenes grandes antes de subir (mejora velocidad también)
- Usa nombres de archivo seguros (sin caracteres raros)
Qué Hacer si Alguien Intenta Subir Malware
- SeenSecure lo rechaza automáticamente
- Revisa el registro: SeenSecure > Firewall > pestaña Subidas
- Si es usuario legítimo que no sabía, explica
- Si hay múltiples intentos desde misma IP, considera bloqueo temporal
Preguntas Frecuentes
¿Si rechazo SVG, me falta funcionalidad? No mucho. SVG es muy versátil pero también es vector de ataque. Si lo necesitas, usa versión "segura" que SeenSecure permite.
¿Ralentiza la subida? Ligeramente. Análisis de contenido añade 1-2 segundos. Pero la seguridad vale la pena.
¿Qué pasa si subo accidentalmente un archivo prohibido? Se rechaza, ves mensaje de error, lo intentas con otro archivo. Nada peligroso.
¿Puedo permitir que solo Admins suban videos? Upload Protection aplica las mismas reglas de extensión, tamaño, tipo MIME y contenido a todos los usuarios por igual — no tiene configuración de permisos diferenciados por rol. Restringir quién puede subir archivos de vídeo es un asunto de roles y capacidades de WordPress (o de un plugin especializado en gestión de permisos), no de esta protección concreta.