Trucos con .htaccess para aumentar la seguridad en WordPress

La seguridad de WordPress es uno de los factores más socavados entre los bloggers novatos. En una instalación de WordPress sin supervisión, existen bastantes vulnerabilidades potenciales que se dejan desatendidas. La mayoría de los tutoriales de instalación de WordPress explican una forma rápida y fácil de implementar WordPress en minutos. Pero se pierden algunos factores de seguridad importantes. Por ejemplo, la navegación de directorios y el uso del nombre de usuario ‘admin’ se consideran graves lagunas de seguridad. Hoy vamos a echar un vistazo a 10 fragmentos de código .htaccess que ayudarán a mejorar la seguridad de su blog de WordPress. Antes de comenzar, echemos un vistazo rápido a lo que es el archivo htaccess.

¿Qué es el archivo .htaccess?

Un archivo htaccess es un archivo de configuración opcional para que el servidor web Apache interprete, para cada directorio. Puede almacenar varias configuraciones en ese archivo, como: proteger con contraseña un directorio, bloquear direcciones IP, bloquear un archivo o carpeta de acceso público, etc. Tradicionalmente, el archivo .htaccess está presente en el directorio de instalación de WordPress base. Almacena la estructura de enlace permanente por defecto.

SUGERENCIA:  antes de comenzar con el tutorial, asegúrese de hacer una copia de seguridad del archivo .htaccess actual (si está presente) en un servicio de almacenamiento en la nube como Dropbox. Esto es para volver al último archivo .htaccess que esté funcionando, si un fragmento de código determinado rompe su sitio. Vamos a empezar.

1. Bloquear Bad Bots


Uno de los mejores usos del archivo .htaccess es su capacidad para impedir que múltiples direcciones IP accedan a su sitio. Esto es útil cuando se bloquean los spammers conocidos y otros orígenes de acceso sospechoso o malicioso. El código es:

# Block one or more IP address.
# Replace IP_ADDRESS_* with the IP you want to block

<Limit GET POST>
order allow,deny
deny from IP_ADDRESS_1
deny from IP_ADDRESS_2
allow from all
</Limit>

Donde IP_ADDRESS_1 es la primera IP que desea evitar que acceda a su sitio. Puede agregar tantas direcciones IP que desee. No importa qué agentes de usuario (navegadores) utilicen estas direcciones IP, no podrán acceder a un solo archivo desde su servidor. El servidor web negará automáticamente todo acceso.

2. Deshabilitar la navegación de directorios

 Esta es una de las fallas de seguridad más socavadas en un sitio de WordPress. Por defecto, el servidor web Apache habilita la navegación de directorios. Esto significa que todos los archivos y carpetas dentro del directorio raíz (a veces llamado el directorio de inicio) del servidor web son habilitados y accesibles por el visitante. No quieres eso porque no quieres que las personas naveguen a través de tus cargas de medios o tus archivos de tema o plugin.

Si al azar selecciono 10 sitios web personales o de negocios que ejecutan WordPress, 6-8 de ellos no tendrán desactivada la navegación del directorio. Esto permite que cualquiera pueda oler fácilmente alrededor de la carpeta wp-content / uploads o cualquier otro directorio que no tenga el archivo index.php predeterminado . De hecho, la captura de pantalla que ve es de uno de los sitios de mi cliente, antes de recomendar la solución. Fragmento de código para deshabilitar la navegación de directorios:

# Disable directory browsing
Options All -Indexes

3. Permitir solo archivos seleccionados de wp-content

 

Como sabe, la carpeta wp-content contiene la mayoría de sus temas, complementos y todas las cargas de medios. Ciertamente no quieres que la gente acceda sin restricciones. Además de deshabilitar la búsqueda en el directorio, también puede denegar el acceso a todos los tipos de archivos, y guardar algunos. En esencia, puedes desbloquear selectivamente archivos como JPG, PDF, DOCX, CSS, JS, etc. y negarlos del resto. Para hacer esto, pegue este fragmento de código en su archivo .htaccess:

# Disable access to all file types except the following
Order deny,allow
Deny from all
<Files ~ ".(xml|css|js|jpe?g|png|gif|pdf|docx|rtf|odf|zip|rar)$">
Allow from all
</Files>

Debe crear un nuevo archivo .htaccess con el código y pegarlo en la carpeta wp-content . No coloque esto en el directorio de instalación base, de lo contrario no funcionará. También puede agregar cualquier tipo de archivo a la lista agregando un ‘|’ después de ‘rar’. La lista anterior contiene los archivos necesarios: XML, CSS y JavaScript, formatos comunes de imagen y documento y, finalmente, los formatos de archivo más utilizados.

4. Restringir todo el acceso a wp-includes

La carpeta wp-includes contiene solo los archivos que son estrictamente necesarios para ejecutar la versión principal de WordPress, uno sin ningún complemento o tema. Recuerde, el tema predeterminado aún reside en el directorio wp-content / theme . Por lo tanto, ningún visitante (incluido usted) debe requerir acceso al contenido de la carpeta wp-include . Puedes deshabilitar el acceso usando este siguiente fragmento de código:

# Block wp-includes folder and files
<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 que solo las direcciones IP seleccionadas accedan a wp-admin

La carpeta wp-admin contiene los archivos necesarios para ejecutar el panel de WordPress. En la mayoría de los casos, sus visitantes no necesitan acceso al panel de WordPress, a menos que quieran registrar una cuenta. Una buena medida de seguridad es permitir que solo unas pocas direcciones IP seleccionadas accedan a la carpeta wp-admin . Puede permitir las direcciones IP de las personas que necesitan acceso al panel de WordPress: editores, colaboradores y otros administradores. Este fragmento de código solo permite que las direcciones IP fijas accedan a la carpeta wp-admin y niega el acceso al resto del mundo.

# Limit logins and admin by IP
<Limit GET POST PUT>
order deny,allow
deny from all
allow from 302.143.54.102
allow from IP_ADDRESS_2
</Limit>

Asegúrese de crear un nuevo archivo .htaccess y pegarlo en la carpeta wp-admin y no en el directorio de instalación base. Si es lo último, nadie, excepto usted, podrá navegar por su sitio, ¡ni siquiera los motores de búsqueda! Ciertamente no quieres eso. Un par de desventajas de esta medida es la siguiente:

  • Si su sitio permite o promueve el registro de nuevos usuarios , sería casi imposible hacer un seguimiento del número de usuarios. Por ejemplo, en WPExplorer, si desea descargar nuestros increíbles temas gratuitos, debe registrarse.
  • Las personas con direcciones IP dinámicas (en su mayoría usuarios de banda ancha ADSL que usan los protocolos PPP o PPPoE) cambian sus IP, cada vez que cierran la sesión e inician sesión en su ISP. Ciertamente, no sería práctico hacer un seguimiento de todas estas IP y agregarlas al archivo htaccess.
  • Banda ancha móvil: ya sea ​​que estés en 3G o 4G, tu dirección IP depende de la torre celular actual a la que estás conectado. Digamos que está viajando: su IP cambiará constantemente con cada par de millas que se mude desde el origen. Una vez más, mantener un registro del archivo htaccess es casi imposible.
  • Puntos de acceso Wi-Fi públicos: el uso de credenciales cuando se conecta a Internet mediante un punto de acceso Wi-Fi público es un gran no-no , ya que un niño con un software pequeño puede extraer todos los caracteres que escriba. Sin mencionar que cada punto de acceso Wi-Fi tendrá una dirección IP única.

Afortunadamente, todas estas desventajas (excepto la primera) se pueden corregir utilizando una VPN. Si configura su VPN para que se conecte con una sola dirección IP, puede simplemente agregarla a su archivo htaccess y todos sus problemas se resolverán.

6. Protege wp-config.php y .htaccess de todos

El archivo wp-config.php contiene las credenciales de acceso más confidenciales de su sitio de WordPress. Contiene el nombre de la base de datos y las credenciales de acceso y varios otros datos críticos, entre otras configuraciones. Bajo ninguna circunstancia desea que otras personas busquen en este archivo. Y, por supuesto, desea deshabilitar el acceso público a la fuente de toda esta seguridad: el propio archivo .htaccess . Puede deshabilitar el acceso a wp-config.php con este código siguiente:

# Deny access to wp-config.php file
<files wp-config.php>
order allow,deny
deny from all
</files>

Para denegar el acceso a todos los archivos htaccess (recuerde que algunos pueden residir en wp-admin y otras carpetas), use este fragmento de código:

# Deny access to all .htaccess files
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>

7. Denegar imagen hotlinking

Uno de los hacks de archivos .htaccess más geniales, este envía a los rastreadores de contenido corriendo con la cola entre las piernas. Cuando alguien usa la imagen de su sitio, su ancho de banda se consume y la mayoría de las veces, ni siquiera se le acredita. Este fragmento de código elimina ese problema y envía esta imagen cuando se detecta un enlace activo.

# Prevent image hotlinking script. Replace last URL with any image link you want.
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourotherwebsite.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://i.imgur.com/MlQAH71.jpg [NC,R,L]

8. Habilitar el almacenamiento en caché del navegador

También conocido como almacenamiento en caché del lado del cliente , este truco .htaccess habilita las opciones de almacenamiento en caché del navegador recomendadas para su sitio de WordPress. También puedes usarlo en otros proyectos – sitios HTML, etc.

# Setup browser caching
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 2 days"
</IfModule>

9. Redirigir a una página de Mantenimiento

Cuando migre sitios web o realice alguna tarea de mantenimiento, siempre se recomienda crear un archivo HTML estático «inactivo para mantenimiento» para informar a sus visitantes que el sitio web está realizando una actualización o una operación de mantenimiento. Simplemente cree un archivo maintenance.html (o cualquier otro nombre de archivo) y cárguelo en el directorio de instalación de WordPress base. Pegue el siguiente fragmento de código en su archivo .htaccess. Una vez que finaliza la operación, asegúrese de eliminar o comentar estas líneas para volver a la operación general. Puede comentar agregando un ‘#’ al principio de cada línea.

# Redirect all traffic to maintenance.html file
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteRule $ /maintenance.html [R=302,L] 

10. Páginas de error personalizadas

También puede el archivo .htaccess para configurar páginas de error personalizadas de fácil uso para errores como 403, 404 y 500. Una vez que haya preparado su página de error, digamos error.html, cárguela en su directorio de instalación de WordPress base. Luego, agregue el siguiente fragmento de código a su archivo .htaccess para habilitar la página de error personalizada:

# Custom error page for error 403, 404 and 500
ErrorDocument 404 /error.html
ErrorDocument 403 /error.html
ErrorDocument 500 /error.html

Conclusión:

Hoy hemos aprendido algunos de los mejores hacks htaccess para fortalecer su sitio de WordPress. Le sugiero que pruebe cada módulo uno por uno mientras realiza una copia de seguridad del archivo .htaccess antes y después de probar cada módulo. Esto es porque el archivo .htaccess es muy crítico. Un carácter ‘#’ perdido o fuera de lugar ‘</IfModule>’ podría destruir la integridad de su sitio. Si accede a su panel de WordPress con frecuencia sobre la marcha, se recomienda no habilitar IP selectivas en su carpeta wp-admin .