Mejor .htaccess para aumentar la seguridad de WordPress

El archivo .htaccess es un archivo de configuración utilizado por el servidor web Apache.

El archivo .htaccess es un archivo de texto plano que se coloca en la raíz de tu sitio web y contiene instrucciones que el servidor utiliza para manejar las solicitudes de los usuarios que visitan nuestro WordPress.

El archivo .htaccess es una herramienta muy poderosa que permite a los administradores de sitios web controlar y personalizar el comportamiento del servidor web, aumentar la seguridad, restringir accesos, proteger carpetas y mucho más.

Uno de los usos más comunes del archivo .htaccess en WordPress es la configuración de reglas de reescritura de URL, que permiten a los administradores crear URL amigables para los visitantes del sitio. Además, también se utiliza para controlar el acceso al sitio, establecer encabezados de seguridad, proteger archivos críticos, entre otras cosas.

En el caso de un sitio web WordPress, el archivo .htaccess puede utilizarse para aumentar la seguridad del sitio. Por ejemplo, puedes utilizarlo para bloquear el acceso a ciertas carpetas y archivos críticos, como la carpeta de inclusión de administrador y el archivo de configuración de la base de datos. También puedes utilizarlo para proteger el sitio de ataques de inyección de código y para forzar la conexión segura HTTPS.

Este es el mejor .htaccess para WordPress.

# Bloquear los archivos de 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>

# Desactivar la exploración de directorios
Options All -Indexes

# Proteger wp-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>

# Proteger .htaccess
<files .htaccess>
order allow,deny
deny from all
</files>

# Protección contra ataques XSS
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>

# Protección contra MIME-sniffing
<IfModule mod_headers.c>
Header set X-Content-Type-Options: "nosniff"
</IfModule>

# Forzar SSL
#RewriteEngine On
#RewriteCond %{HTTPS} off
#RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Descripción de cada sección del código .htaccess usado para proteger WordPress.

  1. <IfModule mod_rewrite.c> y </IfModule>: Estas etiquetas indican que las siguientes líneas de código sólo deben ejecutarse si el módulo mod_rewrite de Apache está habilitado.
  2. RewriteEngine On: Habilitar el motor de reescritura de URL de Apache, necesario para usar reglas de reescritura.
  3. RewriteBase /: Establece la base para las reglas de reescritura.
  4. RewriteRule ^wp-admin/includes/ – [F,L]: Bloquea el acceso a cualquier archivo dentro de la carpeta wp-admin/includes.
  5. RewriteRule !^wp-includes/ – [S=3]: Esta regla indica que no se deben aplicar las siguientes tres reglas a la carpeta wp-includes.
  6. RewriteRule ^wp-includes/[^/]+\.php$ – [F,L]: Bloquea el acceso a cualquier archivo PHP dentro de la carpeta wp-includes, excepto a los que están dentro de subcarpetas.
  7. RewriteRule ^wp-includes/js/tinymce/langs/.+\.php – [F,L]: Bloquea el acceso a cualquier archivo PHP dentro de la carpeta wp-includes/js/tinymce/langs.
  8. RewriteRule ^wp-includes/theme-compat/ – [F,L]: Bloquea el acceso a cualquier archivo dentro de la carpeta wp-includes/theme-compat.
  9. Options All -Indexes : Deshabilita la lista de directorios de Apache. Esto significa que si alguien intenta acceder a un directorio en lugar de un archivo en tu sitio web, verá un error 403 (prohibido) en lugar de la lista de archivos en ese directorio.
  10. <files wp-config.php> and </files>: Este bloque protege el archivo wp-config.php, que contiene información importante sobre la configuración de tu sitio web, incluyendo las credenciales de la base de datos.
  11. <files .htaccess> and </files>: Este bloque protege el propio archivo .htaccess de ser accedido por navegadores web.
  12. <IfModule mod_headers.c> and </IfModule>: Estas etiquetas indican que las siguientes líneas de código sólo deben ejecutarse si el módulo mod_headers de Apache está habilitado.
  13. Header set X-XSS-Protection «1; mode=block»:

Advertencia y recomendaciones sobre cambios en el .htaccess

Es importante que sepas que cualquier cambio en el archivo .htaccess debe ser realizado con precaución, ya que cualquier error de sintaxis puede causar problemas en el funcionamiento del sitio. Por esta razón, te recomiendo hacer una copia de seguridad del archivo antes de realizar cambios, eso lo puedes hacer simplemente duplicando el archivo antes de editarlo.

Bloqueando bots usando .htaccess

El código comienza bloqueando varios bots conocidos estableciendo variables de entorno para su user agent. Luego usa la directiva Limit en Apache para denegar el acceso a esos bots.

Bots bloqueados

  • rogerbot
  • exabot
  • mj12bot
  • dotbot
  • gigabot
  • ahrefsbot
  • AhrefsBot
  • sitebot
  • ZoominfoBot
  • SemrushBot y sus variantes
  • Superfeedr bot
  • Cliqzbot
  • linkdexbot
# Bloquea bots
SetEnvIfNoCase User-Agent .*rogerbot.* bad_bot
SetEnvIfNoCase User-Agent .*exabot.* bad_bot
SetEnvIfNoCase User-Agent .*mj12bot.* bad_bot
SetEnvIfNoCase User-Agent .*dotbot.* bad_bot
SetEnvIfNoCase User-Agent .*gigabot.* bad_bot
SetEnvIfNoCase User-Agent .*ahrefsbot.* bad_bot
SetEnvIfNoCase User-Agent .*AhrefsBot.* bad_bot
SetEnvIfNoCase User-Agent .*sitebot.* bad_bot
SetEnvIfNoCase User-Agent .*ZoominfoBot.* bad_bot
SetEnvIfNoCase User-Agent .*SemrushBot.* bad_bot
SetEnvIfNoCase User-Agent .*SemrushBot-SA.* bad_bot
SetEnvIfNoCase User-Agent .*SemrushBot-BA.* bad_bot
SetEnvIfNoCase User-Agent .*SemrushBot-SI.* bad_bot
SetEnvIfNoCase User-Agent .*SemrushBot-SWA.* bad_bot
SetEnvIfNoCase User-Agent .*SemrushBot-CT.* bad_bot
SetEnvIfNoCase User-Agent .*SemrushBot-BM.* bad_bot
SetEnvIfNoCase User-Agent .*Superfeedr bot.* bad_bot
SetEnvIfNoCase User-Agent .*Cliqzbot.* bad_bot
SetEnvIfNoCase User-Agent .*linkdexbot.* bad_bot
<Limit GET POST HEAD>
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</Limit>

Evitando la indexación de directorios usando htaccess

Luego se deshabilita la lista de archivos de directorios con la directiva Options -Indexes.

# Evita la navegación e indexado de directorios
Options -Indexes

Evitando hotlinking usando htaccess

Después se implementan reglas para evitar el hotlinking de imágenes y otros assets. Se revisa el referrer y si no coincide con el dominio propio, se deniega el acceso.

# Evitar hotlinking
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)dominioaproteger.com/.*$ [NC]
RewriteRule \.(gif|jpg|jpeg|bmp|zip|rar|mp3|flv|swf|xml|php|png|css|pdf)$ - [F]

Con redirect 403

Para archivos como gif, jpg, etc. se hace un redirect 403.

Con imagen anti-hotlinking

En el caso específico de imágenes gif y jpg, se redirige a una imagen local con un mensaje contra el hotlinking.

# Mostrar una imagen con un mensaje contra el hotlinking
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)dominioaproteger.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ https://www.dominioaproteger.com/notemolestes.gif [R,L]

Bloqueando peticiones sospechosas a nuestra web usando el htaccess

Finalmente se tienen varias reglas de redireccionamiento 403 para patrones de URLs que pueden indicar ataques o comportamientos maliciosos.

Patrones bloqueados

  • Cadenas muy largas
  • Secuencias sospechosas de caracteres
  • Intentos de acceso a archivos comunes de sistema
  • Referencias a código malicioso
# Peticiones raras
<IfModule mod_alias.c>
	RedirectMatch 403 (?i)([a-z0-9]{2000,})
	RedirectMatch 403 (?i)(https?|ftp|php):/
	RedirectMatch 403 (?i)(base64_encode)(.*)(\()
	RedirectMatch 403 (?i)(=\\\'|=\\%27|/\\\'/?)\.
	RedirectMatch 403 (?i)/(\$(\&)?|\*|\"|\.|,|&|&?)/?$
	RedirectMatch 403 (?i)(\{0\}|\(/\(|\.\.\.|\+\+\+|\\\"\\\")
	RedirectMatch 403 (?i)(~|`|<|>|:|;|,|%|\\|\{|\}|\[|\]|\|)
	RedirectMatch 403 (?i)/(=|\$&|_mm|cgi-|muieblack)
	RedirectMatch 403 (?i)(&pws=0|_vti_|\(null\)|\{\$itemURL\}|echo(.*)kae|etc/passwd|eval\(|self/environ)
	RedirectMatch 403 (?i)\.(aspx?|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rar|rdf)$
	RedirectMatch 403 (?i)/(^$|(wp-)?config|mobiquo|phpinfo|shell|sqlpatch|thumb|thumb_editor|thumbopen|timthumb|webshell)\.php
</IfModule>

Foto de Perfil de Juan Luis Martel

Juan Luis Martel.

Profesional en Tecnologías Integradas - Desarrollo Web y Electrónica.

Las Palmas de Gran Canaria, España

Soy un apasionado de la programación con experiencia en Wordpress, PHP, PIC, Microcontroladores y ASM. Además, soy Técnico Especialista en Electrónica y también tengo experiencia como profesor en este campo. Mi pasión por la electrónica me ha llevado a combinar mis habilidades en programación con mi conocimiento técnico, lo que me permite crear soluciones innovadoras y eficientes en mis proyectos de paginas webs y de electrónica.

¡No te vayas sin valorar el contenido!

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 5 / 5. Recuento de votos: 1

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil el contenido...

🙏 Ayúdame y compártelo en tus redes sociales ¡Significa mucho para mí! - Gracias

¡Siento que el contenido no te haya sido útil o gustado! 😔

¡Déjame mejorar este contenido!

Dime, ¿cómo crees que puedo mejorar este contenido? 🙏 ¡Significa mucho para mí! - Gracias

Deja un comentario