Proteger WordPress aún más: permisos, wp-config y .htaccess
Las actualizaciones, una contraseña segura y la verificación en dos pasos son la base de un sitio WordPress seguro. El bastionado (hardening) va un paso más allá: consiste en configurar el sitio de forma que una vulnerabilidad o una cuenta comprometida causen el menor daño posible. Aquí puede leer qué ajustes son y cómo aplicarlos en su plan de hosting.
Lo que ya se hace en el servidor
Una parte ya está resuelta en nuestros servidores. xmlrpc.php está bloqueado por defecto (WordPress: no se puede acceder a xmlrpc.php), las funciones PHP peligrosas están desactivadas (Seguridad de PHP: funciones desactivadas), y funcionan un firewall para el tráfico web y un escáner de malware. Consulte Web Application Firewall e Imunify360: analizar su sitio web en busca de malware. Los pasos que se indican a continuación los realiza usted mismo, en su propio sitio.
Todos los archivos se editan en DirectAdmin con el Administrador de archivos. Los archivos que empiezan por un punto, como .htaccess, solo se ven si se muestran los archivos ocultos: consulte Mostrar y editar archivos ocultos como .htaccess. Haga primero una copia de cada archivo y guarde esa copia fuera de public_html.
1. No editar código desde el panel de administración
Abra wp-config.php en domains/example.com/public_html y añada esta línea encima de la línea que indica que deje de editar (That's all, stop editing!):
define( 'DISALLOW_FILE_EDIT', true );
Así desaparecen del panel de administración los editores de archivos de temas y plugins. Quien se haga con una cuenta de administrador no podrá introducir código malicioso en su tema con unos pocos clics. La instalación y actualización de plugins sigue funcionando con normalidad. En el mismo archivo, establezca WP_DEBUG en false, para que los mensajes de error nunca aparezcan en la pantalla de los visitantes.
2. Nada de PHP en la carpeta uploads
En wp-content/uploads van imágenes y documentos, no PHP. Un intruso que pueda subir un archivo aprovechando una vulnerabilidad intentará precisamente colocar ahí un archivo PHP y ejecutarlo. Cree en wp-content/uploads un archivo .htaccess con:
<Files *.php> Require all denied </Files>
Después, compruebe que su sitio, sus formularios y su biblioteca de medios siguen funcionando.
3. Sin listado de carpetas
Si una carpeta no contiene index.php ni index.html, un servidor web puede mostrar una lista de todos sus archivos. Añada al principio del .htaccess en public_html:
Options -Indexes
Para comprobarlo, abra una carpeta sin archivo índice, por ejemplo https://example.com/wp-content/uploads/. Debería ver una página de error (403 o 404), no una lista.
4. Permisos de archivos y carpetas
| Qué | Permisos |
|---|---|
| Carpetas | 755 |
| Archivos | 644 |
wp-config.php | Más estrictos: 600 o 640. Pruebe 600 y compruebe que su sitio sigue funcionando. |
No utilice nunca 777: con ese permiso, cualquiera en el servidor puede escribir en esa carpeta. Si un manual dice que es necesario para que funcione la subida de archivos, la causa está en otro sitio. Para cambiar los permisos, consulte Permisos de archivos y carpetas (chmod).
5. Sin restos en la carpeta web
Todo lo que hay en public_html se puede solicitar a través de la web. Por eso, elimine:
- copias de
wp-config.php, comowp-config.php.bakowp-config.old. Contienen la contraseña de su base de datos y se envían como texto plano; - copias de seguridad como
backup.zipodatabase.sql; - una carpeta
.gitde un desarrollador; wp-content/debug.log;- archivos de prueba como
info.phpconphpinfo().
Si desea hacer inaccesible un archivo concreto, consulte Bloquear archivos mediante .htaccess.
6. Cabeceras e inicio de sesión
- Las cabeceras de seguridad indican al navegador cómo debe tratar su sitio. Consulte HSTS y cabeceras de seguridad para su sitio web.
- La página de inicio de sesión puede limitarla a su propia dirección IP con Proteger wp-login.php de WordPress.
- Verificación en dos pasos para administradores: consulte Configurar la verificación en dos pasos para WordPress.
Ocultar la versión de WordPress es una cuestión de orden, no de seguridad: los programas de ataque simplemente prueban la vulnerabilidad. Solo actualizar cierra la brecha.
¿Y un plugin de seguridad?
Un plugin de seguridad suele reunir un firewall, un escáner y protección del inicio de sesión. Un firewall dentro de un plugin solo actúa cuando WordPress ya se está ejecutando; el firewall del servidor detiene las solicitudes antes. Por tanto, un plugin es un complemento, sobre todo para la verificación en dos pasos y para limitar los intentos de inicio de sesión. Utilice como máximo uno: dos plugins de seguridad a la vez suelen entrar en conflicto.
.htaccess o wp-config.php deja todo el sitio fuera de servicio. Consulte Error 500 o "error crítico" en su sitio web (también tras una actualización de WordPress).Más información
- Hardening WordPress (developer.wordpress.org, en inglés)
¿Quiere aprender más? Siga el curso gratuito de WordPress, lección 7.4 Bastionar el sitio: permisos, cabeceras y plugins de seguridad.
