Con algunas modificaciones en .htaccess, en este tutorial haremos que nuestro WordPress sea más seguro.
Este archivo se encuentra en el directorio raíz de nuestro servidor FTP. En algunos casos tendremos que activar la opción de «Mostrar archivos ocultos» para poder verlo.
Antes de tocar nada, haremos un duplicado de este archivo por si rompemos la página web realizando alguna modificación. Cómo siempre dicen, más vale prevenir que curar y de este modo siempre podemos volver como estábamos.
Bloquear acceso al directorio wp-includes
El directorio wp-includes contiene el core de WordPress, todos los archivos principales para que nuestra web funcione. Esta carpeta debería estar totalmente restringida por cualquier plugin, theme o incluso para nosotros mismos.
Con estas líneas de código se bloqueara el acceso desde cualquier navegador:
# Bloquear acceso al directorio wp-includes
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
Bloquear acceso al archivo wp-config.php
En wp-config.php se encuentran datos tan importantes como el acceso y contraseña de nuestra base de datos.
Por defecto, nadie puede tener acceso a este archivo. Si alguien intenta entrar en midominio.com/wp-config.php, se ve la página totalmente en blanco.
No obstante, si nuestro servidor PHP (por cualquier razón) fallara en algun momento, todo el archivo sería visible.
¿Cómo nos curamos en salud? Vamos a denegar el acceso desde nuestro .htaccess con este código:
# Bloquear acceso a wp-config.php
<Files wp-config.php>
Order Allow,Deny
Deny from all
</Files>
De esta manera, si entramos en midominio.com/wp-config.php, ya no se verá en blanco, simplemente saldrá un mensaje de «Forbidden error»:
En este otro tutorial veremos que en wp-config.php también es muy archivo muy importante dónde podemos añadir más medidas de seguridad.
Bloquear .htaccess
¿Por qué no protegeríamos el propio archivo dónde estamos haciendo todas estas modificaciones? Del mismo modo que hemos bloqueado el wp-config.php, deberíamos hacer lo mismo con .htaccess.
# Bloquear acceso a .htaccess
<Files ~ “^.*\.([Hh][Tt][Aa])”>
Order allow,deny
Deny from all
Satisfy all
</Files>
Bloquear directorio de themes y plugins
En este caso, todos los plugins que hay en «wp-content/plugins» y todos los themes que hay en «wp-content/themes» nadie debería acceder.
También cerraremos estos directorios:
# Proteger acceso a directorios de themes y plugins
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L]
Deshabilitar ver directorios
Si algunos de nuestros directorios no contiene el archivo index.php, el navegador nos mostraría el listado de todos los archivos y directorios que contiene. WordPress ya lo tiene previsto y tiene en cada directorio este archivo.
¿Pero que pasaría si algún plugin de terceros se le olvida?
Como en muchas ocasiones instalamos plugins de desarrolladores de terceros, cabe la posibilidad de que se les olvide el index.php en un directorio y nos haga vulnerables.
¿Cómo lo solucionamos? Muy fácil. Vamos a deshabilitar totalmente esta posibilidad con este código:
# Deshabilitar la visibilidad de directorios
Options -Indexes
Resumen y conclusión
Cómo has visto, la mayoría de medidas de seguridad es prohibir archivos que comprometen nuestra seguridad de WordPress.
Aunque WordPress ya es seguro de por sí mismo, no está de más añadir unas medidas extras para dificultar que los hackers accedan a nuestra página web.
Si te ha gustado este tutorial de seguridad de WordPress y querías alguno más así, házmelo saber en mi formulario de contacto.