Protegiendo WordPress con .htaccess
Los archivos .htaccess son archivos de configuración usados por el servidor web Apache. Estos pueden sobreescribir la configuración para un directorio particular o VirtualHost. Para que estos archivos sean cargados por el servidor Apache, la opción AllowOverride debe estar en On a nivel de servidor para todos los VirtualHost o debe ser activada en el VirtualHost. Esta opción debe estar activa para poder usar los enalces permanentes en WordPress.
Es importante destacar que los archivos .htaccess son sensibles a errores de configuración, por lo que una sintaxis mal hará que tu sitio no se vea. Siempre antes de modificarlos haz una salva del archivo .htaccess a modificar. De esta forma, si algo estuviera mal podrás restaurarlo sin problemas.
Modificando el archivo .htaccess de WordPress
Cuando se activan los enlaces permanentes de WordPress, un archivo .htaccess es creado en el directorio raíz de la instalación de WordPress. El archivo contiene algo como esto:
1 2 3 |
# BEGIN WordPress WORDPRESS DATA # END WordPress |
WordPress inserta sus datos entre los comentarios “# Begin WordPress” y “# End WordPress”. Por ello, no se debe agregar ninguna información entre los mismos, ya que puede ser borrado WordPress.
Cómo mejorar la seguridad de WordPress con htaccess
A continuación, te listo una serie de configuraciones que mejoran la seguridad de WordPress mediante htaccess. Ten presente que el código mostrado se debe agregar en el archivo .htaccess del directorio raíz de tu instalación de WordPress, a menos que se indique lo contrario.
1. Bloquear Robots de mala reputación (Bad Robots)
Uno de los mayores usos de htaccess es bloquear el acceso a tu sitio desde varias direcciones IPs. Esto te permite bloquear el acceso a spammers o a orígenes de actividad maliciosa o sospechosa:
1 2 3 4 5 6 7 8 |
# Bloqueando direcciones IPs. # Remplaza IP_ADDRESS_* con la direccion IP que deseas bloquear <Limit GET POST> order allow,deny deny from IP_ADDRESS_1 deny from IP_ADDRESS_2 allow from all </Limit> |
2. Desactivar el listado de directorios
Por defecto, el servidor web Apache posibilita listar el contenido de los directorios. Esto permite a cualquiera revisar la información que tienes subida en el directorio wp-content/uploads, además de listar otros directorios de tu instalación de WordPress.
Esta opción también se puede bloquear a nivel de servidor o en el VirtualHost de tu sitio. Para desactivar el listado de directorios en Apache, solo tienes que agregar esto a tu archivo .htaccess:
1 2 |
# Desactivando el listado de directorios Options All -Indexes |
3. Permitir solo determinados archivos desde el directorio wp-content
El directorio wp-content contiene los temas, plugins, archivos de media subidos a WordPress, entre otros archivos. Aunque, por defecto, no puedes ver el contenido del mismo, ya que en su raíz existe un archivo index.php (el cual es servido primero y muestra una página en blanco), como medida adicional de seguridad a la desactivar el listado de directorios, puedes limitar a qué tipos de archivos se puede acceder. Para ello, debes crear un archivo .htaccess en el directorio wp-content y agregar lo siguiente:
1 2 3 4 5 6 |
# Desactivando el acceso a todos los archivos, excepto los listados order deny,allow deny from all <files ~ ".(xml|css|js|jpe?g|png|gif|pdf|docx|rtf|odf|zip|rar)$"> allow from all </files> |
4. Restringir todo el acceso a directorio wp-includes
El directorio wp-includes contiene solamente los archivos necesarios para ejecutar el núcleo de WordPress, sin ningún plugin o tema. Así que ningún visitante necesita acceso al mismo. Para bloquear el acceso, agrega el siguiente código:
1 2 3 4 5 6 7 8 9 10 |
# Bloqueando el directorio y archivos de 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> |
5. Permitir acceso a la administración de WordPress desde determinados IPs
El directorio wp-admin contiene todos los archivos necesarios para ejecutar el Dashboard de WordPress. En muchos casos, tus visitantes no necesitan acceso al mismo, por lo que es una buena práctica solo permitir el acceso desde IPs de confianza. Crea un archivo .htaccess dentro del directorio wp-admin y agrega el siguiente código:
1 2 3 4 5 6 7 8 |
# Limitando el acceso a wp-admin desde IPs de confianza # Sustituya TRUSTED_IP_ADDRESS_* por la dirección IP deseada <Limit GET POST PUT> order deny,allow deny from all allow from TRUSTED_IP_ADDRESS_1 allow from TRUSTED_IP_ADDRESS_2 </Limit> |
Realmente el método descrito anteriormente no funciona si las direcciones IPs de los usuarios que quieres que acceden al Dashboard de tu WordPress cambian dinámicamente. Una solución a ello, es que se conecten a tu sitio a través de una VPN con IP fijo o cambiar el slug de la interfaz de administración (con estos plugins lo puedes hacer fácilmente: iTheme Security o WPS Hide Login) y comunicarles solo a ellos la nueva URL de acceso al Dashboard de WordPress.
6. Proteger el archivo wp-config.php y .htaccess
El archivo wp-config.php contiene información sensible sobre tu sitio web como el nombre de la base datos, usuario y contraseña, entre otros datos. Por esto, es recomendable denegar el acceso a dicho archivo al igual que a los archivos .htaccess.
Es válido destacar que, por defecto, el servidor web Apache, no muestra el contenido de los archivos .php y .htaccess, pero esta medida de seguridad adicional no permite que puedan ser descargados mediante una brecha de seguridad.
Para denegar el acceso al archivo wp-config.php:
1 2 3 4 5 |
# Denegando el acceso al archivo wp-config.php <files wp-config.php> order allow,deny deny from all </files> |
Para denegar el acceso de todos los archivos .htaccess de tu instalación de WordPress:
1 2 3 4 5 6 |
# Denegando el acceso a todos los archivos .htaccess <files ~ "^.*\.([Hh][Tt][Aa])"> order allow,deny deny from all satisfy all </files> |
7. Desactivar XMLRPC
Según Wikipedia:
XML-RPC es un protocolo de llamada a procedimiento remoto que usa XML para codificar los datos y HTTP como protocolo de transmisión de mensajes.
Básicamente es un protocolo que te permite publicar en tu WordPress desde clientes webblog como Windows Live Writer. Además, es usado si empleas la aplicación para móvil de WordPress o para conexiones de aplicaciones IFTTT. No obstante, muchos atacantes emplean XMLRPC para realizar ataques de fuerza bruta amplificados con el método system.multicall.
Para bloquear las peticiones XMLRPC, agrega el siguiente código:
1 2 3 4 5 |
# Bloqueando peticiones a xmlrpc.php <Files xmlrpc.php> order allow,deny deny from all </Files> |
8. Evitar que otros sitios enlacen tus imágenes
El enlace de imágenes desde otros sitios o hotlinking como se le conoce en inglés, no es una vulnerabilidad, sino más bien repercute en ancho de banda consumido y esto, por lo general, te afecta si tu hosting te limita en ancho de banda.
Para evitar que otros sitios enlacen tus imágenes puedes agregar el siguiente código:
1 2 3 4 5 6 7 |
# Evita que los sitios hagan hotlinking a tu WordPress RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ # Remplaza www.tusitio.com con la URL de tu sitio RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?www.tusitio.com [NC] # Los archivos que coinciden con las extensiones abajo son bloqueados RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L] |
Conclusiones
En este tutorial has aprendido cómo aumentar la seguridad de tu sitio WordPress a través de configuraciones básicas, mediante htaccess. Es importante probar cada uno de los ejemplos descritos, ya que un error de sintaxis puede dejar tu sitio inoperable.
Si conoces otros códigos u otras vías que te permiten aumentar la seguridad en WordPress, compártelo con nosotros en los comentarios y ayúdanos a mejorar.
Dejar un comentario
¿Quieres unirte a la conversación?Siéntete libre de contribuir