Seguridad

El bloqueo de wp-config que puede tumbar tu web

Un permiso mal ajustado, una regla de bloqueo incompatible o una copia de wp-config.php olvidada puede exponer las claves de tu WordPress o dejar la web inaccesible. El riesgo no está solo en el archivo principal: backups, repositorios Git, procesos de despliegue y la configuración de Apache o Nginx pueden revelar secretos o provocar un error crítico en producción.

Control y protección de wp-config.php consiste en auditar quién puede leerlo y ejecutarlo, verificar que no sea accesible por HTTP, aplicar permisos y ownership compatibles con tu hosting y proteger secretos en copias y CI/CD.

Índice

Anuncio

Audita wp-config.php antes de cambiar nada

Control y protección de wp-config.php exige comprobar quién lee el archivo, bloquear su acceso web y mantener sus secretos fuera de lugares públicos.

Localiza la instalación y el webroot

Busca la carpeta que contiene wp-admin, wp-content y wp-includes; suele llamarse public_html, httpdocs, www o /var/www/html. Localiza wp-config.php en esa carpeta o un nivel por encima, y confirma cuál es el webroot: todo lo que quede dentro puede quedar expuesto si una regla falla.

Comprueba si hay exposición pública

Abre una ventana privada y visita https://tudominio.es/wp-config.php: el resultado correcto es 403 o 404, pero nunca 200, descarga ni texto PHP. Repite la prueba con wp-config.php.bak, wp-config.php.old, wp-config.txt, backup.zip y database.sql, porque una copia olvidada puede revelar las mismas credenciales que el archivo principal.

Registra permisos y vías de vuelta

Anota la ruta de wp-config.php, sus permisos, propietario y grupo; en SSH, ls -l wp-config.php muestra esos datos. Haz una copia fuera del webroot y comprueba que puedes descargarla. Además, define si revertirás por panel, SFTP, SSH o consola del proveedor antes de intervenir.

Un bloqueo HTTP correcto devuelve 403 o 404 al pedir /wp-config.php, mientras la portada, /wp-admin y una consulta de la base de datos siguen funcionando.

Con el inventario hecho, ya puedes ajustar el acceso local sin adivinar qué proceso necesita leer el archivo.

El bloqueo de wp-config que puede tumbar tu web

Ajusta permisos según propietario y PHP

Comprueba el propietario y el usuario de PHP antes de aplicar CHMOD.

Identifica quién ejecuta PHP

En hosting compartido, PHP suele ejecutarse con tu mismo usuario y 600 suele funcionar. En un VPS con PHP-FPM, puede funcionar bajo www-data, nginx o un usuario de pool distinto; consulta el panel, la configuración del pool o al proveedor y no uses chown a ciegas.

Elige el modo más restrictivo que funcione

CHMOD 600 es adecuado cuando el propietario del archivo es el mismo usuario que ejecuta PHP. Si PHP necesita entrar mediante el grupo, 640 puede ser válido si el grupo está correctamente asignado.

EntornoPermiso orientativoCondición necesariaPrueba tras el cambio
Hosting con PHP bajo tu usuario600Propietario y PHP coincidenPortada y acceso a administración
PHP-FPM con grupo autorizado640PHP pertenece al grupo lectorConsulta a base de datos sin errores
Archivo solo legible por propietario400No necesitas editarlo desde WordPressActualización y restauración controladas
Grupo lector sin escritura440Propietario y grupo correctosLogs de PHP-FPM sin denegaciones

Aplica el cambio desde el gestor de archivos o con chmod 600 wp-config.php o chmod 640 wp-config.php, y prueba una página pública, el acceso y una acción que guarde datos.

Reconoce un permiso que falla

Un “Error establishing a database connection” tras el cambio suele indicar que PHP ya no puede leer las credenciales; también pueden aparecer errores 500, 502 o 503. Restaura el último modo funcional, revisa propietario, grupo y usuario PHP, y consulta el log de errores antes de aplicar otra restricción.

El acceso local ya está limitado; ahora toca cerrar la puerta pública.

El bloqueo de wp-config que puede tumbar tu web

Bloquea el acceso web según tu servidor

Deniega la petición directa a wp-config.php en el servidor que atiende tu dominio.

Añade la regla en Apache o LiteSpeed

Si usas Apache o LiteSpeed y permite .htaccess, abre el archivo situado junto a wp-config.php y añade estas líneas al principio, sin modificar las reglas estándar de WordPress:

<Files .php>

    Require all denied

</Files>

Configura el bloqueo en Nginx

Si usas Nginx y controlas su configuración, añade dentro del bloque server { } una regla exacta en el archivo activo del dominio:

location = /wp-config.php {

    deny all;

    access_log off;

    log_not_found off;

}

Después valida con nginx -t y recarga solo si la sintaxis es correcta; en hosting gestionado, pide al proveedor que aplique la regla.

Comprueba la respuesta y los logs

Visita https://tudominio.es/wp-config.php en una ventana privada o ejecuta curl -I. Debes obtener 403 o 404; un 200 obliga a detenerse, y los logs de acceso y errores confirman qué servidor atendió la petición y si rechazó alguna regla.

Comprobación segura tras bloquear el archivo
1. Solicita
/wp-config.php
2. Confirma
403 o 404, nunca 200
3. Revisa
Access log y error log
Termina probando portada, acceso a wp-admin y una tarea que consulte la base de datos.

Bloquear la URL no protege los secretos que ya estén en copias o repositorios. Por eso, la decisión depende de qué capa controlas. En hosting compartido, prioriza permisos compatibles con el usuario de PHP, auditoría de copias públicas y reglas Apache o LiteSpeed cuando el proveedor admita .htaccess; si no tienes acceso a la configuración, solicita el bloqueo al soporte. En un VPS con Nginx y PHP-FPM, valida el usuario y el grupo de PHP antes de elegir CHMOD 600 o CHMOD 640, y aplica la regla en el bloque server. En Docker o CI/CD, evita cambios manuales persistentes dentro del contenedor: entrega secretos mediante variables de entorno o un gestor de secretos, conserva wp-config.php fuera de repositorios Git y define permisos, propietario de archivos y reversión en la imagen o en la automatización de despliegue.

En WordPress multisite, verifica además la ruta compartida y prueba el acceso de un subsitio antes de cerrar el cambio.

Separa secretos de Git y del despliegue

Saca las credenciales y los salts del repositorio de código.

Evita que Git guarde credenciales

Añade wp-config.php y .env a .gitignore y versiona una plantilla sin valores reales. Si el archivo ya estuvo en Git, borrarlo no elimina el secreto del historial: rota la contraseña de base de datos y revisa quién tuvo acceso al repositorio.

wp-config.php

.env

*.sql

*.zip

*.tar.gz

Inyecta variables por entorno

Las variables de entorno permiten usar credenciales distintas en producción, pruebas y desarrollo sin incluir contraseñas en el código. PHP puede leerlas con getenv(), por ejemplo define('DB_PASSWORD', getenv('DB_PASSWORD'));, pero prueba el patrón en preproducción porque algunos hostings no las pasan igual a PHP.

Rota sesiones y claves con aviso

Renovar las ocho claves y salts invalida las cookies y cierra todas las sesiones activas. Rótalos ante una filtración, una intrusión o al retirar accesos privilegiados, coordina el cambio en una ventana de bajo tráfico y rota también la contraseña de base de datos cuando corresponda.

La ubicación del archivo puede añadir protección, pero solo si encaja con tu arquitectura.

Además de los permisos de archivos y el bloqueo HTTP, conviene revisar las constantes de endurecimiento en wp-config.php según su impacto real. DISALLOW_FILE_EDIT desactiva el editor de temas y plugins del escritorio, una medida útil en producción para reducir cambios de código desde cuentas comprometidas. FORCE_SSL_ADMIN obliga a usar HTTPS en wp-admin cuando el certificado y la terminación TLS están correctamente configurados. WP_ENVIRONMENT_TYPE ayuda a diferenciar producción, desarrollo y pruebas.

En cambio, DISALLOW_FILE_MODS bloquea instalaciones, actualizaciones y cambios de plugins y temas desde el panel; puede ser apropiada en despliegues Git o CI/CD controlados, pero no en un sitio cuyo mantenimiento dependa del actualizador de WordPress.

Mueve el archivo solo si tu arquitectura lo admite

Mueve wp-config.php fuera del directorio público solo cuando controles las rutas y la reversión.

Valora si el traslado aporta seguridad

En una instalación convencional puedes mover el archivo un nivel por encima del directorio público, por ejemplo de /var/www/html a /var/www/wp-config.php. Haz una copia verificable, mueve solo el archivo y prueba portada, acceso y funciones con base de datos antes de considerar el cambio terminado.

Evita el traslado en casos delicados

No lo muevas manualmente en Docker, multisite, Bedrock, Composer, rutas personalizadas o despliegues que esperan una ubicación concreta. Si no puedes explicar dónde busca WordPress el archivo y cómo revertirás desde consola o SFTP, mantén su ubicación y refuerza permisos y bloqueo HTTP.

La última defensa es validar que la seguridad no haya interrumpido el servicio.

Anuncio

Valida el cambio y prepara la reversión

Prueba el bloqueo, la conexión y los logs antes de cerrar la intervención.

Haz pruebas sin revelar datos

Confirma 403 o 404 para /wp-config.php, abre portada y páginas internas, accede a /wp-admin, prueba un formulario y guarda datos. Mantén WP_DEBUG_DISPLAY desactivado en público; si investigas, registra errores mediante WP_DEBUG_LOG en un entorno controlado.

Lee los registros adecuados

Consulta el access log para confirmar ruta y código de respuesta, y el error log de Apache, Nginx o PHP-FPM ante errores 500, problemas de permisos o fallos de carga. Trata los logs con cuidado porque pueden contener IP y rutas internas.

Recupera rápido ante un error

Si falla la web, restaura primero el permiso, regla o ubicación anterior según tus notas y realiza un único cambio de reversión. Si no recuperas el servicio en 5 a 10 minutos, restaura la copia verificada de wp-config.php y solicita al proveedor los logs del momento exacto.

No conviene aplicar cambios manuales si el proveedor gestiona por completo la configuración, si no tienes acceso seguro para revertirlos o si el problema es una infección activa. Esta guía tampoco sustituye actualizaciones, copias de seguridad, control de accesos, autenticación de dos factores ni una limpieza profesional tras una intrusión.

Con las pruebas documentadas, puedes resolver las dudas habituales antes de aprobar el cambio.

Preguntas frecuentes

¿Qué permisos debe tener wp-config.php?

600 suele funcionar cuando PHP se ejecuta con el mismo propietario del archivo. 640 puede ser necesario si PHP-FPM lee mediante un grupo autorizado; prueba siempre portada y administración tras cambiarlo.

¿Cómo sé si wp-config.php es accesible desde Internet?

Solicita https://tudominio.es/wp-config.php y confirma una respuesta 403 o 404. Un 200, una descarga o cualquier contenido visible exige revisar de inmediato el servidor y posibles copias públicas.

¿Puedo proteger wp-config.php con .htaccess?

Puedes bloquearlo con .htaccess si tu servidor usa Apache o LiteSpeed y admite esas reglas. Nginx ignora .htaccess, así que necesita una regla en su propia configuración.

¿Qué pasa si cambio los salts de WordPress?

Cambiar los ocho salts cierra todas las sesiones activas de WordPress. Hazlo tras una posible filtración y avisa antes a administradores, editores y usuarios con área privada.

¿Es seguro mover wp-config.php fuera del directorio público?

Es seguro en una instalación convencional si controlas rutas y puedes revertir el cambio. No es recomendable hacerlo manualmente en Docker, multisite o hosting gestionado sin confirmación del proveedor.

Mantén un control verificable

El archivo de configuración merece el mismo cuidado que las llaves de una oficina: limitarlo exige verificar servidor, usuario PHP y reversión.

Lo esencial:

Anuncio

Para saber más

Si deseas profundizar, aquí tienes algunos recursos de interés:

RESUMIR CON IA: Extrae lo importante

Comparte este artículo:

Josu Barrios

Josu Barrios

Somos especialistas en mantenimiento WordPress para empresas, profesionales y tiendas online. Contamos con experiencia en seguridad web, optimización de rendimiento, actualizaciones, copias de seguridad y resolución de incidencias técnicas, ayudando a que cada sitio funcione de forma rápida, estable y protegida. Nuestro enfoque combina soporte técnico profesional, buenas prácticas de seguridad y seguimiento continuo para ofrecer un servicio fiable, transparente y orientado a resultados reales.