«Seguridad de Laravel», «hardening de WordPress» — cuando buscamos, buscamos respuestas por tecnología. Esta página es el punto de entrada a la defensa por framework (sin pasos de ataque).
Compartido (igual en todos los frameworks)
control de acceso, secretos, inyección, CVE de dependencias, mala configuración. Las defensas básicas también son compartidas.
Específico del framework (cada capítulo)
los «valores por defecto peligrosos» y «el punto más atacado». Esta es la única parte que cambia según la tecnología.
Tipos de debilidad compartidos por todos los frameworks
Primero el panorama general. Estos tipos se atacan una y otra vez sin importar la tecnología; cada capítulo de framework explica cómo se manifiestan en esa tecnología.
Guías por framework
Lee el capítulo de tu tecnología. Cada uno va «peligros por defecto → punto más atacado → pasos de hardening».
WordPress
Laravel
Next.js
Java / Spring
Express / Rails / Django / ASP.NET Core
Ajustes que hay que revisar primero en producción (tabla rápida por framework)
En cualquier framework, revisa primero dos cosas: si producción muestra errores detallados y dónde viven tus secretos. Los nombres de los ajustes cambian, así que busca tu fila más abajo. Los nombres se han contrastado con la documentación oficial actual de cada proyecto (versión en la última columna).
| Framework | Desactivar las páginas de error detalladas | Dónde viven los secretos, y la trampa | Ajuste que se suele olvidar | Documentación revisada |
|---|---|---|---|---|
| WordPress | WP_DEBUG a false en wp-config.php (false por defecto) | Credenciales de la BD en wp-config.php; nunca dejes copias en directorios públicos | DISALLOW_FILE_EDIT para bloquear la edición de archivos desde el panel; borra los complementos que no uses | Advanced Administration Handbook |
| Laravel | APP_DEBUG=false en .env | Nunca subas .env al repositorio (un .env.encrypted cifrado sí vale) | Tras config:cache, env() fuera de los archivos de configuración no devuelve nada | 13.x |
| Next.js | Ejecuta next build y luego next start; nunca expongas el servidor de desarrollo | Las variables NEXT_PUBLIC_ se incrustan en el JavaScript del navegador | Un secreto con el prefijo NEXT_PUBLIC_ | 16.x |
| Spring Boot | Deja las trazas de la pila fuera de las respuestas de error (mantén el valor por defecto) | Pasa los valores por variables de entorno, no en configuración escrita en el código | Actuator solo expone health por HTTP por defecto; nunca pongas management.endpoints.web.exposure.include=* | 4.1 |
| Django | DEBUG = False | Carga SECRET_KEY desde una variable de entorno o un archivo; mantenla fuera del control de versiones | Configura ALLOWED_HOSTS; ejecuta manage.py check --deploy | 6.1 |
| Ruby on Rails | Usa la configuración del entorno de producción (config/environments/production.rb) | config/credentials.yml.enc más config/master.key; nunca subas master.key | config.force_ssl = true para forzar HTTPS | 8.1 |
| Express | NODE_ENV=production quita las trazas de la pila de la respuesta de error por defecto | Pásalos por variables de entorno, no en el código | helmet para cabeceras seguras; app.disable('x-powered-by') | Guía oficial actual |
| ASP.NET Core | La Developer Exception Page solo está activa en el entorno Development (valor por defecto de la plantilla actual) | Los user secrets son para desarrollo; en producción usa variables de entorno o un almacén de claves | Nunca ejecutes producción con ASPNETCORE_ENVIRONMENT en Development | 10.0 |
Casos reales: la mayoría de los incidentes vinieron de actualizaciones omitidas y ajustes de producción, no de fallos del núcleo
El patrón que destaca no es el fallo del framework en sí, sino una corrección disponible que no se aplicó, o un ajuste de desarrollo que se quedó en producción.
- Equifax (2017): la corrección del fallo de Apache Struts (CVE-2017-5638) se publicó el mismo día en que se divulgó, pero no se aplicó a un sistema público, y se filtraron datos personales de unos 147 millones de personas (→ la filtración de Equifax).
- Log4Shell (2021): un fallo en una librería de registro de Java. Muchas organizaciones la tenían incorporada a través de otros componentes y no podían saber si la usaban (→ Log4Shell).
- Casos de agentes de IA (2026): cuando agentes de IA de investigación llegaron a sitios web reales, se leyeron credenciales desde una página de debug expuesta, y los sitios no se dieron cuenta (→ AI agents reaching real websites, en inglés).
En el OWASP Top 10 (2025), el número uno es el control de acceso roto, el número dos la mala configuración de seguridad y el número tres los fallos en la cadena de suministro de software (problemas en los componentes de los que dependes). Todos ocurren en cualquier framework.
Cómo comprobar tu propio sitio
Haz estas comprobaciones solo en sitios que gestionas tú.
Abre una URL que no existe y mira la página de error
Usa los comandos de comprobación del propio framework
python manage.py check --deploy; Laravel muestra el modo debug con php artisan about --only=environment. En Spring Boot, revisa management.endpoints.web.exposure.include en tu configuración.Analiza las dependencias y lo que se ve desde fuera
npm audit para npm, composer audit para Composer u osv-scanner para todo (desde el navegador: el analizador de vulnerabilidades de dependencias). Para lo que pueden ver los de fuera, la comprobación de cabeceras de seguridad muestra las cabeceras que faltan, y la auditoría de seguridad completa del sitio revisa de una vez la exposición de .env y .git, los certificados y los atributos de las cookies.Errores habituales y cómo corregirlos
| Error habitual | Qué pasa | Corrección |
|---|---|---|
Poner el prefijo NEXT_PUBLIC_ a una clave de API secreta | La clave se incrusta en el JavaScript del navegador, donde cualquiera puede leerla | Quita el prefijo, úsala solo en el servidor y revoca la clave filtrada en el emisor |
| Exponer todos los endpoints de monitorización (p. ej. Spring Boot Actuator) | Los valores de configuración y el contenido de la memoria se pueden leer desde fuera | Expón solo health y similares; deja el resto tras autenticación |
| Desactivar los complementos que no usas pero dejarlos instalados | Los archivos siguen en el servidor y dejan de recibir actualizaciones | Borra lo que no uses |
| Leer un aviso de actualización sin confirmar que se ha aplicado | El agujero sigue abierto aunque exista corrección (el patrón de Equifax) | Comprueba la versión tras actualizar y analiza las dependencias de forma periódica |
La visión de este sitio: los incidentes vienen de cómo se opera un framework, no del framework en sí
Discutir «este framework es seguro/peligroso» rara vez ayuda. La mayoría de los incidentes reales no vienen de un fallo del núcleo sino del uso — actualizaciones omitidas, secretos expuestos, autorización ausente, valores por defecto peligrosos. Este sitio funciona sobre Next.js, y nuestra defensa principal no tiene nada de especial: monitorear los CVE de dependencias, mantener los secretos fuera del código y de los directorios públicos, autenticación fuerte, copias de seguridad recuperables. Cada capítulo de framework aplica esa base a esa tecnología concreta.
Primero, cubre lo básico compartido
Antes de meterte en un capítulo de framework, es eficiente establecer primero lo que funciona en todas las tecnologías.
- Inicio: la lista de comprobación de la base de seguridad (cuentas de administración, secretos, parcheo, detección, recuperación)
- Práctica: el manual de respuesta a vulnerabilidades · monitorear los CVE de dependencias (osv-scanner)
- Secretos: mantén los secretos fuera de los directorios públicos
Fuentes
- WordPress Advanced Administration Handbook, "Hardening WordPress" y "Debugging in WordPress" — developer.wordpress.org
- Laravel 13.x, "Configuration" (Environment File Security / Debug Mode) — laravel.com
- Next.js, "How to use environment variables in Next.js" (16.x) — nextjs.org
- Spring Boot 4.1, "Endpoints" (exposición de Actuator) — docs.spring.io
- Django 6.1, "Deployment checklist" — docs.djangoproject.com
- Ruby on Rails Guides, "Securing Rails Applications" (8.1) — guides.rubyonrails.org
- Express, "Production Best Practices: Security" y "Error Handling" — expressjs.com
- Microsoft Learn, "Handle errors in ASP.NET Core" (10.0) — learn.microsoft.com
- OWASP Top 10:2025 — top10.owasp.org
Sigue leyendo
- Guías: seguridad de WordPress · seguridad de Laravel
- Lo básico: la lista de comprobación de la base de seguridad (compartida por todos los frameworks)
- Glosario: qué es un CVE (la unidad para rastrear los fallos conocidos de un framework)