Cómo configurar el archivo .htaccess en WordPress paso a paso − mejora la seguridad de tu sitio web

En este artículo veremos qué es el archivo .htaccess y cómo configurarlo correctamente, un archivo que a simple vista puede parecer complejo y nos puede producir rechazo, pero que a la hora de crear un sitio web en WordPress, nos permite hacer cosas como crear redirecciones, configurar URLs amigables, prohibir el acceso a archivos y carpetas del sitio y reforzar la seguridad, entre otros.

¿Qué es un archivo .htaccess?

El archivo .htaccess, («Hypertext Access» o «acceso de hipertexto»), es un archivo de configuración que se utiliza en los servidores web que funcionan bajo el software Apache Web Server y que, en pocas palabras, controla la forma en que Apache interactúa con tu sitio.

Cuando colocamos un archivo .htaccess en un directorio que está cargando mediante un servidor web Apache (p. ej. el directorio raíz de nuestro sitio web), el archivo .htaccess es reconocido y ejecutado por Apache, manipulando ciertos aspectos de su configuración en base a las reglas que hemos definido en este archivo.

Las reglas definidas dentro del archivo .htaccess se aplican siempre al directorio donde éste se encuentra – normalmente el directorio raíz del dominio. No obstante, aunque el fichero se ubique en el directorio principal, la mayoría de las reglas se aplican también a todas las subcarpetas, por lo que WordPress aplica el .htaccess en todo todo el sitio.

Configurar el archivo .htaccess correctamente

Utilizar correctamente el archivo .htaccess en WordPress es fundamental, ya que al ser un archivo con tanto potencial (ni más ni menos que modificar la configuración del servidor Apache), es carne de cañón para los hackers.

Cambiar los permisos

Teniendo en cuenta lo delicado que es este archivo y cómo está de manera activa en el punto de mira de los hackers, una de las primeras configuraciones que vamos a ver es cómo proteger el .htaccess.

permisos archivo .htaccess wordpress
Cambiar los permisos del .htaccess desde el FTP

Lo primero que tenemos que saber es que WordPress sugiere que establezcamos los permisos del archivo .htaccess en 644. Para ello, tenemos que acceder al servidor web de nuestro sitio utilizando algún programa FTP (p. ej. FileZilla) y hacer clic con el botón derecho del ratón en el archivo .htaccess del directorio raíz. A continuación, haremos clic en «Permisos de archivo» o alguna opción similar e introduciremos el permiso con un valor numérico de 644. Con esto aseguramos el archivo contra modificaciones externas.

Otra forma de proteger el archivo .htaccess es creando una regla que prohíba cualquier acceso al archivo, pero esto lo veremos enseguida.

Hacer una copia de seguridad

En cualquier caso, antes de modificar archivos importantes primero debemos hacer una copia de seguridad. En este caso, podemos hacer una copia de seguridad del .htaccess fácilmente a través del FTP, descargando el archivo a nuestro ordenador. Si algo va mal, sólo tendremos que subirlo al servidor y sobreescribir por el que ya existe.

descargar .htaccess al ordenador
Descargar una copia del .htaccess

Para descargar el archivo .htaccess en nuestro ordenador sólo tenemos que entrar en nuestro sitio web desde el FTP o el administrador de archivos del servidor, hacer clic derecho sobre el archivo en el directorio principal y seleccionar «Descargar». El archivo se guardará en la carpeta que tengas abierta en el árbol de directorios local.

Comentar el código

Una última cosa antes de ponernos manos a la obra: los comentarios. Sabemos que en programación es una buena práctica comentar el código. En este caso, no estamos exactamente programando nada, sino modificando la configuración del servidor mediante unas reglas específicas. Aún así, podemos y es interesante comentar todo lo que añadimos en el .htaccess, ya que de esta manera, si en un futuro volvemos a acceder a este archivo para hacer o deshacer modificaciones, sabremos por qué añadimos cada código y qué efecto tenían.

Los comentarios en el .htaccess son de una sola línea, siempre comienzan con un «#» y no son interpretados por los navegadores; sólo sirven como orientación para el propietario del sitio web y otros usuarios que tengan acceso al archivo, para mantener el código limpio y recordar qué utilidad tiene cada cosa.

Recuerda que el .htaccess también debe ser cargado por el navegador cuando llamamos a una página de nuestro sitio, así que asegúrate de mantenerlo lo más reducido posible y sólo añade las reglas que realmente necesitas.

Contenido por defecto .htaccess en WordPress

Por defecto, WordPress sólo necesita una regla en el .htaccess para funcionar. Esta regla está ahí para que puedas cambiar las URLs. Esto es, por ejemplo, convertirlas para que sean amigables y adecuadas para el SEO.

La siguiente porción de código es el contenido original por defecto del archivo .htaccess en WordPress. Si tu archivo no lo tiene, asegúrate de añadirlo:

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

Como puedes ver, el código por defecto del .htaccess está comentado con «#BEGIN WordPress» y «#END WordPress», tal y como destacaba anteriormente que sería interesante hacerlo de ahora en adelante.

Proteger archivo .htaccess y htpasswd

En este punto, podemos comenzar a ver diferentes reglas y configuraciones del .htaccess que pueden ser muy útiles si tenemos un sitio web en WordPress.

Para empezar, antes he mencionado que aparte de cambiar los permisos del .htaccess desde el FTP, otra forma de proteger el archivo .htaccess (y también el .htpasswd) es creando una regla para denegar cualquier intento de acceso no autorizado.

# Acceso prohibido .htaccess y .htpasswd
<FilesMatch "(\.htaccess|\.htpasswd)">
  Order deny,allow
  Deny from all
</FilesMatch>

O también de esta otra forma:

# Acceso prohibido .htaccess sensible a minúsculas/mayúsculas
<Files ~ "^.*\.([Hh][Tt][Aa])">
 Order allow,deny
 Deny from all
 Satisfy all
</Files>

Restringir el acceso al admin de WordPress

Con el fragmento que verás a continuación puedes crear una protección muy efectiva contra la piratería del área de administración de tu sitio web, restringiendo el acceso a todos los usuarios a excepción de los que especifiques mediante su dirección IP.

# Cambiar la ruta del .htpasswd por la de tu dominio.
<Files wp-login.php>
 AuthName "Panel de administración"
 AuthType Basic
 AuthUserFile /usr/local/www/apache24/tu-ruta/tu-dominio.com/.htpasswd 
 require valid-user
</Files>

Proteger y bloquear el acceso no autorizado al wp-config.php

Algunos archivos de nuestro sitio web contienen información sensible. Por ejemplo, el archivo wp-config.php contiene los datos de la base de datos de tu sitio y unas claves de autenticación únicas que sólo tú debes conocer. Para que nadie pueda leer este archivo e incluso manipular los datos, puedes bloquearlo a través del .htaccess.

# Acceso prohibido al wp-config.php 
<files wp-config.php>
 Order allow,deny
 Deny from all
</files>

Bloquear el archivo XML-RPC

El archivo XML-RPC, junto con el área de administración de WordPress, son el objetivo de ataque más común, así que no está de más bloquearlo.

# ———————————————————————
#   Desactivar completamente la interfaz XML-RPC – riesgo de seguridad
# ———————————————————————

<files xmlrpc.php>
Order Deny,Allow
Deny from all
</files>

Cabeceras de seguridad HTTP

Cada vez que un navegador solicita una página a un servidor web, el servidor responde entregando la página y enviando una cabecera de respuesta HTTP con el contenido. Estas cabeceras no sólo pueden contener cosas como un conjunto de caracteres, sino también enviar configuraciones relevantes para la seguridad.

Para ello, se utilizan las llamadas cabeceras de respuesta HTTP, con las que se puede controlar el comportamiento de un navegador. Una cabecera Strict-Transport-Security, por ejemplo, indicaría al navegador que se comunicara sólo a través de HTTPS.

# —————————————————————————
#  CABECERAS DE SEGURIDAD HTTP
#  Probar en: https://securityheaders.com
# —————————————————————————

## No-Referrer-Header
<IfModule mod_headers.c>
    Header set Referrer-Policy "no-referrer"
</IfModule>

## Strict Origin when cross origin Header
<IfModule mod_headers.c>
Header set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>

## X-FRAME-OPTIONS-Header
<IfModule mod_headers.c>
    Header set X-Frame-Options "sameorigin"
</IfModule>

## X-XSS-PROTECTION-Header
<IfModule mod_headers.c>
    Header set X-XSS-Protection "1; mode=block"
</IfModule>

## X-Content-Type-Options-Header
<IfModule mod_headers.c>
    Header set X-Content-Type-Options "nosniff"
</IfModule>

## Strict-Transport-Security-Header – for HTTPS
<IfModule mod_headers.c>
   Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>

## Esto evita que se puedan utilizar certificados falsos. (Experimental)


<IfModule mod_headers.c>
   Header set Expect-CT "enforce, max-age=21600"
</IfModule>

Redireccionar HTTP a HTTPS

A diferencia de otros fragmentos de código, éste asegura que todas las peticiones HTTP se reenvían a la versión HTTPS. Si tienes algún problema con este código, quizá ya tengas una redirección de HTTP a HTTPS activa en tu instalación de WordPress. En ese caso, comenta o elimina el código.

#<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#</IfModule>

Protección Hotlink contra el robo de imágenes

El hotlinking evita que tus imágenes puedan ser enlazadas desde otros sitios web externos y, por lo tanto, consumen los recursos de tu alojamiento web. Con esta protección, tus imágenes sólo se muestran en tu sitio.

# ——————————————————————————————–
#   Protección Hotlink contra robo de imágenes – IMPORTANTE: Cambiar "?dominio\" por el dominio de tu sitio web.
#   Ejemplo: "?dominiogeek\". Si no usas https (deberías), cambia https por http.
# ——————————————————————————————–

#<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER}     !^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g?|png)$           [NC]
RewriteCond %{HTTP_REFERER}     !^https?://([^.]+\.)?dominio\. [NC]
RewriteRule \.(gif|jpe?g?|png)$                             – [F,NC,L]
#</ifModule>

Evitar que descubran tu nombre de usuario

¿Sabías que puedes averiguar fácilmente tu nombre de usuario añadiendo «/?author=1» a tu dominio? Pruébalo, WordPress te redirigirá inmediatamente a la página de autor del usuario uno (1). Esto hace que sea súper fácil para los hackers averiguar tu nombre de usuario para el inicio de sesión. Claro, tampoco llegarán muy lejos con eso, pero debes obstaculizar el camino de los hackers lo máximo posible.

Si añades este código en tu .htaccess, al introducir «/?author=X» en la URL de tu web, se mostrar la página de inicio.

# Impide que descubran tu nombre de usuario
 RewriteEngine On
 RewriteBase /
 RewriteCond %{QUERY_STRING} .*author=(.+.?) [NC]
 RewriteRule (.*) /blog/?author= [NC,L,R=301]

Editar el .htaccess con plugins

Si no estás familiarizado con la edición de código en un editor, siempre puedes utilizar algún plugin para modificar el htaccess de forma rápida y segura. Uno de los plugins más usados en WordPres para editar el contenido del archivo .htaccess es Htaccess File Editor.

htaccess editor wordpress

Las principales características que diferencian este plugin de cualquier editor de código son:

  • Probar los cambios del .htaccess antes de guardar: el botón «probar antes de guardar» te permite probar la sintaxis del archivo htaccess antes de guardar los cambios.
  • Copias de seguridad automáticas de .htaccess: se realizan cada vez que hacemos una modificación y se guardan en wp-content/htaccess-editor-backups/.
  • Soporte de WordPress Network (WPMU): sólo disponible si utilizas WordPress Multisite.

¿Qué otros códigos .htaccess utilizas para mejorar tu sitio web? Comenta y danos tu opinión 🙂👍.

Acerca de Alex Monrás

Fundador y CEO de DominioGeek. Siguiendo sin interrupción los últimos acontecimientos tecnológicos. Tengo 15 años de experiencia creando contenido en la red sobre tecnología, informática e Internet.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Send this to a friend