Wordpress y el fichero .htaccess

Cristian in Wordpress

June 26, 2008

Hace unos meses cuando hice la primera instalación de este blog, una vez ya lo tení­a configurado y funcionando (toma minutos) hice un repaso a la seguridad haciendo especial hincapié en la configuración del fichero .htaccess.

Después de algunos problemas iniciales entendiendo el funcionamiento de esta aplicación y con la ayuda de los miembros de los wordpress forums dimos con un setup que de momento, y después de probarlo por algunos meses me parece óptimo.

Consejos para optimizar la seguridad de tu instalación de wordpress
  • Actualizar siempre a la última versión, esto es como una carrera, tenlo en cuenta.
  • Añade un prefijo aleatorio a las tablas de tu base de datos
  • Revisa como han quedado los permisos después de la instalación, con especial atención a los archivos crí­ticos en wordpress.
  • Oculta el acceso a los directorios para que no sean accesibles tecleando directamente la dirección. Esto lo conseguirás añadiendo un fichero index.php en blanco (silence is golden) en el directorio.
  • Establece reglas en el .htaccess para controlar la visibilidad de los directorios de tu wordpress y para proteger el archivo de configuración.
Modelo de fichero .htaccess

Este es el modelo de configuración del fichero .htaccess optimizado para wordpress. Recuerda que debes ponerlo en el directorio raíz de tu servidor y que necesitarás activar la opción de ver archivos invisibles en tu gestor FTP.

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# BEGIN Redirect if request is not in the domain

<IfModule mod_rewrite.c>
RewriteCond %{HTTP_REFERER} !^https?://(www.)?yourdomain.com/.* [NC]
RewriteRule ^/?wp-content/?.* http://www.yourdomain.com/ [NC,L,R=301]
RewriteCond %{HTTP_REFERER} !^https?://(www.)?yourdomain.com/.* [NC]
RewriteRule ^/?wp-includes/?.* http://www.yourdomain.com/ [NC,L,R=301]
# RewriteCond %{HTTP_REFERER} !^https?://(www.)?your domain.com/.* [NC]
# RewriteRule ^/?wp-admin/?.* http://www.yourdomain.com/ [NC,L,R=301]
</IfModule.c>

# END Redirect if request is not in the domain

# BEGIN wp-content protection

Redirect 301 /wp-content/index.php http://www.yourdomain.com/
Redirect 301 /wp-content/themes/index.html http://www.yourdomain.com/
Redirect 301 /wp-content/plugins/index.html http://www.yourdomain.com/
Redirect 301 /wp-content/uploads/index.html http://www.yourdomain.com/

# END wp-content protection

# START disable hotlinking of images with forbidden or custom image option

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?www.yourdomain.com/.*$ [NC]
#RewriteRule \.(gif|jpg)$ - [F]

# END disable hotlinking of images with forbidden or custom image option

# protect the htaccess file
<files .htaccess>
order allow,deny
deny from all
</files>

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

Analicemos el contenido detenidamente.

El primer bloque “Wordpress” establece los parámetros para el re-write de las urls, siempre que el módulo re-write esté activado. El contenido cambiará dependiendo de la estructura que hayas montado.

En los siguientes bloques se establecen las reglas para:

  1. Denegar el acceso a los directorios crí­ticos de wordpress si la petición no viene desde el sitio web
  2. Proteger el acceso al directorio wp-content, donde se almacena parte del contenido que generas como usuario de wordpress
  3. Desactivar la posibilidad de linkear externamente las imágenes del dominio
  4. Proteger el acceso a los ficheros .htaccess y wp-config.php.
Denegar el acceso a los directorios críticos de wordpress si la petición no viene desde el sitio web

Si las peticiones viene de fuera del dominio especificado se redirecciona al usuario a la página principal del sitio web.
Así­ se previene el acceso a los directorios que son parte del core de wordpress, así­ como al módulo de administración y al directorio donde almacenamos el contenido.
De este modo, cuando las peticiones van al directorio includes, wp-admin o wp-content lo redirecionamos con un 301.

Proteger el acceso al directorio wp-content, donde se almacena parte del contenido que generas como usuario de wordpress

Para reforzar la seguridad en los directorios crí­ticos de wordpress, añadiremos una hoja index.php en blanco a los directorios, asegurando un redireccionamiento en modo 301 si hay alguna petición directa a los ficheros alojados ahí.

Desactivar la posibilidad de linkear externamente las imágenes del dominio

De este modo protegerás que la gente embeba las imágenes directamente desde tu blog, ahorrando en gasto de banda y preveniendo el robo de contenido sin permiso.
Hay una opción, desactivada en el ejemplo, que te permite asignar una imagen que saldrá en lugar de la original si se da el hotlinking.

Proteger el acceso a los ficheros .htaccess y wp-config.php.

De este modo protegerás el acceso a los dos ficheros más importantes de la instalación de wordpress, el wp-config.php y el fichero .htaccess del que ahora estamos hablando.

A alguien se le ocurre como mejorar este modelo?

Comments(10)

  1. 1.
    kayardiah September 28, 2008 at 6:51 pm

    thank you, guy

  2. 2.
    buxara February 10, 2009 at 3:11 pm

    clarisimo el articulo, pero me queda una duda, este .htaccess iria en la raiz, en wp-admin/ o donde?

    un saludo

  3. 3.
    Cristian February 10, 2009 at 3:57 pm

    El .htaccess debe ir en el directorio raí­z del servidor o en su defecto, en el directorio de la instalación de wordpress. Espero que haya servido de ayuda.

  4. 4.
    Cesar March 10, 2009 at 4:29 pm

    Hola: Muy buen post, pero en el modelo de .htaccess tienes varios error de digitación que puede llevar, a quien lo copie, a errores.
    Saludos :)

  5. 5.
    Cristian March 10, 2009 at 4:55 pm

    Gracias por el aviso, ya están corregidos los errores de transcripción ;)

  6. 6.
    spasmos March 21, 2009 at 10:20 pm

    He probado tu modelo de .htaccess y me da un error 500…donde está el fallo??

  7. 7.
    spasmos March 21, 2009 at 11:21 pm

    perdon…el error solo lo da con las instrucciones para “Denegar el acceso a los directorios crí­ticos de wordpress si la petición no viene desde el sitio web”

  8. 8.
    Mejorar la seguridad de tu Wordpress March 25, 2009 at 10:03 am

    [...] escogido para dar una mínima seguridad al blog. Encontrareis más información sobre este tema en: crstian.gimmicklab.com, Ayuda Wordpress y viciao2k3 que es de donde yo he recogido documentación. Hay más opciones de [...]

  9. 9.
    ephek September 30, 2009 at 5:15 am

    Just wondering, I’ve learned a lot about it and how dangerous it is. But how do I get rid of it if I do have on eon my pc?

  10. 10.
    ephek October 2, 2009 at 5:52 am

    really appriciate it thanks!

Insert Comment