Seguridad de wp-config.php: cómo reforzar WordPress

Aviso de afiliados v3.1
Aviso de afiliados v3.2 (móvil)

Mientras wp-config.php estaba abierto en vi, la copia de intercambio (.swp) creada en la misma carpeta se podía abrir directamente desde una dirección web. Lo comprobamos en este sitio el 2026-09-13, y esa copia contenía la contraseña de la base de datos y todas las claves de seguridad.

Para la seguridad de wp-config.php, revisa los seis puntos siguientes en orden, de arriba abajo.

1️⃣ Qué pasa si wp-config.php queda expuesto

wp-config.php contiene el nombre, el usuario y la contraseña de la base de datos, además de ocho claves de seguridad que cifran las cookies de inicio de sesión.

Archivo wp-config.php de WordPress

Si este archivo queda expuesto, un atacante puede conectarse directamente a la base de datos o falsificar sesiones con las claves de seguridad y hacerse con los permisos de administrador.

2️⃣ Limitar los permisos del archivo a 600

WordPress suele usar 755 para las carpetas y 644 para los archivos, pero wp-config.php se limita a 600 para que solo el propietario pueda leerlo y escribirlo. Este es el comando ejecutado en nuestro sitio de pruebas, testpilotweb.com.

chmod 600 /home/testpilotweb/www/wp-config.php
stat -c '%a %U' /home/testpilotweb/www/wp-config.php
600 testpilotweb

En servidores donde PHP se ejecuta con una cuenta distinta a la del propietario del archivo, WordPress no puede leerlo con 600 y el sitio no abre. En testpilotweb.com, PHP-FPM se ejecuta con la misma cuenta que el propietario, así que el sitio siguió abriendo con normalidad tras el cambio.

En un hosting compartido sin SSH, aplica el mismo valor desde el menú de permisos de un cliente FTP o del Administrador de archivos de cPanel.

3️⃣ Bloquear el acceso en el servidor web

Si no puedes cambiar los permisos o quieres una capa más, haz que el servidor web rechace directamente las peticiones a wp-config.php.

🔲 Apache (.htaccess)

<Files wp-config.php>
    Require all denied
</Files>

Las líneas [order allow,deny] y [deny from all] habituales en artículos antiguos son sintaxis de Apache 2.2. En Apache 2.4 solo funcionan si el módulo de compatibilidad (mod_access_compat) está activado.

🔲 nginx

nginx no lee .htaccess, así que añade una regla [location] a la configuración del servidor; este sitio devuelve 403 de la misma forma.

location ~* /wp-config(-sample)?\.php$ {
    deny all;
}

Escapa el punto de la expresión regular como [\.]. Si lo dejas tal cual, también se bloquean direcciones de entradas como [/wp-config-php-기본-설정/]; este sitio tuvo una entrada que devolvía 403 justo por ese error.

4️⃣ Bloquear archivos temporales del editor y copias de seguridad

La copia [.swp] que se crea mientras un archivo está abierto en vi y la copia [.bak] que dejas antes de editar no se ejecutan como PHP: se sirven como texto plano.

nginx corta ambos tipos; [444] es un código propio de nginx que cierra la conexión sin responder.

location ~ \.sw[opx]$ { return 444; }
location ~* (\.(bak|orig|old|save)|_ori|\.bak\.[0-9]+)$ { return 444; }

5️⃣ Moverlo un nivel por encima de la raíz web

WordPress busca wp-config.php primero en la carpeta de instalación y, si no está, lo carga desde la carpeta inmediatamente superior. Si subes el archivo un nivel por fuera de [public_html], ninguna dirección web puede alcanzarlo.

Pero si la carpeta superior contiene el [wp-settings.php] de otra instalación de WordPress, WordPress no leerá el wp-config.php de ahí. Después de moverlo, comprueba enseguida que el sitio y el panel de administración abren.

6️⃣ Desactivar la edición de archivos

Desactiva los menús ‘Editor de archivos de temas’ y ‘Editor de archivos de plugins’ del escritorio de WordPress. Aunque un atacante se haga con una cuenta de administrador, bloquea una de las vías más directas para inyectar código malicioso desde el navegador.

define('DISALLOW_FILE_EDIT', true);	

7️⃣ Eliminar wp-config-sample.php

wp-config-sample.php es un archivo de ejemplo que se usa durante la instalación, así que puedes eliminarlo cuando termine. No contiene nada sensible, pero los atacantes lo buscan en su ruta por defecto, así que no hay motivo para conservarlo.

Las líneas reales del archivo de ejemplo y lo que significa cada una se explican en el artículo Ajustes básicos de wp-config.php (otra entrada). Si conservas el archivo, la parte [(-sample)?] de la regla de nginx anterior también lo bloquea.

WordPress Box

ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Demuestra que eres humano: 3   +   3   =