Seguridad básica para WordPress por medio htaccess

Además de la optimización, el fichero .htaccess nos proporciona una seguridad complementaria a todos los plugins que WordPress y su comunidad nos pueda ofrecer. Existen unas premisas básicas de seguridad para empezar.  Las dos primeras son de relleno pero que TODO el mundo debería saber:

  1. Conocer nuestro hosting a la perfección y saber quién está detrás de éste (shared,gratuito,ftp,sftp,ssl, cpanel,permisos,…). Parece una tontería, pero a veces muchos se olvidan de algo tan primordial como no informarse del sitio donde «va a comenzar a vivir su idea o su proyecto». Puede que en otro post hablé sobre los hosting, los SEO hosting, los hosting «baneados» e incluso de la temática de seguridad en dominios, haciendo hincapié en los ccTLD, sobretodo los .es, que gozan de desprotección a nivel legal.
  2. Conocer nuestro lugar de trabajo, o sea, nuestro ordenador. Debemos mantenerlo actualizado y limpio, tanto de registro como de todo tipo de malware residente (para los más puristas, lo siento, incluiré dentro de este término troyanos,keyloggers,rootkits,virus de cualquier índole,macros o scripts perniciosos,etc…). Haremos un post sobre ello, y el arsenal de herramientas gratuitas con las que contamos.

Tras esto, ¿qué debemos tener en cuenta antes o una vez instalado nuestro wordpress?

  • Protegernos mediante el .htaccess y a su vez protegerlo de agresiones exteriores.
  • Proteger los core o los ficheros núcleos como wp-config.php
  • Proteger nuestro blog de curiosos que intentan indexarlo y ver la estructura de los archivos en el servidor.
  • Proteger el blog de todo tipo de SPAM y del hotlinking que agota ancho de banda y enlentece nuestro WP.
  • Evitar en la medida de lo posible ataques mediante inyección SQL u otro tipo de vulnerabilidad que posea tanto servidor como blog.

Pasos a seguir:

  • Si existe .htaccess, haz una copia de seguridad de éste antes de introducir cualquier modificación, ya que en caso de «cagada» siempre puedes volverlo a subir por ftp o por un administrador de archivos.
  • Para los más novatos, recordarles que puedes generar el archivo a partir de un archivo de texto .txt y después renombrarlo a .htaccess. Recuerda: sin extensión alguna, tal cuál.
  • Cualquier error en la síntaxis del archivo puede ocasionar un mal funcionamiento del servidor donde alojas el blog.
  • Nunca dejes que el público pueda escribir en el .htaccess. Recuerda dejarlo siempre en 644, salvo que se indique otra cosa por motivos de compatibilidad.
  • Activa la función mod_rewrite ya que a veces está por defecto en off en muchas configuraciones de servidores:

# Activa la funcion reescritura
RewriteEngine on

  • Proteger .htaccess del exterior. La gente suele ponerlo en el directorio root, pero en algunas ocasiones puedes colocarse en la carpeta que deseamos proteger. El código es el siguiente:

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

  • Protección de wp-config.php. Editamos el .htaccess en el directorio donde está alojado el archivo. El código es el siguiente:

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

  • Ahora vamos a deshabilitar que nuestra estructura de archivos y carpetas sea visible desde cualquier navegador. Esto permite en algunas ocasiones acceder a archivos o documentos que no queremos, además de revelar información sobre nuestro hosting y el tipo de servidor que utiliza para explotar vulnerabilidades. Un código simple:

# Desahilitar navegacion
Options All -Indexes

  • Se hace difícil protegernos sobre el spam en nuestros comentarios, puesto que si nos pasamos filtrando no dejaremos escribir a casi nadie y nuestro tráfico emprezará a decrecer como una cosa mala. Actualmente, existen programas o scripts que chequean la web en busca de blogs objetivos. Algunos son spammer generales o bots y otros son tipos con visión comercial que actúan sólo en blogs dónde existen determinadas keyword o temáticas. El uso de «armas» como Xrummer, SeNuke, HummingBird, Demon o Blog Commenters Automáticos permiten saltarse algunas normas y llegar disimuladamente hasta nuestros blogs para promocionarse, obtener backlinks de blogs con PR y ofrecernos enlaces cortos que redireccionan a anuncios CPA o aplicaciones facebook. Son consideradas técnicas de blackhat y los buscadores suelen rechazar y banear toda web o dominio que origine alteraciones y variaciones en las SERPs. Ahora bien, además del los plugins antispam para wordpress, podemos adornar nuestro htaccess con el siguiente código:

# Proteger WP de spammers
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*YOURDOMAIN.com.* [OR] RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L] </IfModule>

  • Cuando el ancho de banda se te dispara de forma alarmante y tus visitas siguen igual, todo nos hace sospechar en que alguien te está robando las imágenes u otro archivo media que tengas en el servidor. Hace unos años era primordial evitar todo esto. En la actualidad, hay diferentes maneras de pensar en acciones antes adoptar una decisión final. Por ejemplo, puede ser positivo si Google Images o  te indexa tus fotos y los visitantes acaban en tu sitio. También muchos bots automáticos hacen una repasada general para indexarte y si tienes titulos y alt en todas tus fotos te irá genial para temas SEO. Por otro lado, el ancho de banda ya no se paga tan caro como antes, es más, muchas compañías de alojamiento te lo ofrecen ilimitado por cuatro duros. La trampa está en que tu imagen sea muy «famosa» y miles de visitantes la vean indexada y realicen miles de consultas en tu web. Entonces, dependiendo de tu hosting, puedes reducir la memoria del procesador y tirar para abajo la web e incluso en el caso de multidominio en shared, todos los demás proyectos. El siguiente código te ayudará a tu lucha diaria contra el hotlinking (aunque también existen plugin en WP que hacen lo mismo). Para que la operación tenga éxito, debes subir una imagen jpg (p.ej con el lema: No robes ancho de banda) a cualquier host de imágenes gratuito como ImageShack, Flickr o Picasa. Anotas el enlace directo y lo sustituyes donde está OTRODOMINIO.com.

# Proteccion WP Hotlinking
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?YOURDOMAIN\.com/ [NC] RewriteRule .(jpg|jpeg|png|gif)$ http://ANOTHERDOMAIN.com/nohotlinking.jpg [NC,R,L] </IfModule>

  • Controla las descargas que ofreces en el blog y fuérzalas a que no puedan agregarse a gestores de descargas. Como véis, esto es muy opcional ya que las nuevas versiones de WP ya tienen bajo control esto, pero si quieres intentarlo:

<FilesMatch "\.(mov|mp3|pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>

  • Los siguientes códigos no son protectores pero si que te ayudarán a mejorar el rendimiento del server, ahorrando transferencia y cargando más rápido la página, puesto que ahora Google lo tiene en cuenta en su algoritmo de valoración. Si el hosting tienen la función php enabled, puedes usar la compresión al vuelo. O sea, tú le das al usuario el formato comprimido (ahorrando tranferencia) y éste, si su navegador soporta la descompresión al vuelo (90% lo hacen),lo recibe rápidamente. Ganáis los dos. Ahí va el código:

# Ahorro de tranferencia para servidores PHP enabled
<ifmodule mod_php4.c>
php_value zlib.output_compression 16386
</ifmodule>

  • Cacheando que es gerundio. No es lo mismo tener que realizar todo el rato la consulta (gastaremos ancho y consumimos CPU), que habilitar la caché para ciertas funciones y durante un tiempo determinado para ahorrar y servir las páginas a buena velocidad. A veces, a pesar de tener un servidor dedicado el consumo se hace excesivo para blogs con un volúmen muy alto de visitas llegando a asfixiar al server y al webmaster. En algunas empresas, se habla del concepto de balancear la carga, donde se reparten las consultas a base de datos, los archivos multimedia, etc… en diferentes servidores con el objetivo de descentralizar todos los procesos y producir posteriormente una potente sinergia que origina una web rápida y robusta. De todas formas, para los pequeños wordpresseros se sigue usando la caché y los plugins destinados a tal fin. En otro post veremos que el concepto está empezando a cambiar con la forma de trabajo a los cloudfront y algunos servicios como S3 de Amazon. El código es bastante extenso según cuál sea su uso:

# cachear imagenes y contenido flash durante un mes
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>

# cachear texto css y javascript durante una semana
<FilesMatch ".(js|css|pdf|txt)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>

# cachear html y htm durante un dia
<FilesMatch ".(html|htm)$">
Header set Cache-Control "max-age=43200"
</FilesMatch>

# deshabilitar la cache para scripts y archivos dinamicos
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>

# metodo alternativo para cachear archivos
ExpiresActive On
ExpiresDefault A604800 # 1 week
ExpiresByType image/x-icon A2419200 # 1 month
ExpiresByType application/x-javascript A2419200 # 1 month
ExpiresByType text/css A2419200 # 1 month
ExpiresByType text/html A300 # 5 minutes
# disable caching for scripts and other dynamic files
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
ExpiresActive Off
</FilesMatch>

  • Los tiempos los puedes fijar siguiendo este patrón: 300 son 5 minutos y 3600 es 1 hora. 604800 será un mes, entonces. Y así, hazte una regla de tres.
  • Prohibiciones. Representan una función específica de seguridad para algo en concreto. Estos son los códigos derivados de lo que hemos visto antes:

# protege un archivo en concreto
<files secretfile.jpg>
order allow,deny
deny from all
</files>

  • Si lo que quieres es proteger unas determinadas extensiones que también se alojan en tu carpeta root o en el blog, aquí tienes el código. Recuerda que puedes sustituirlos por la extensión que tú eligas:

<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
Order Allow,Deny
Deny from all
</FilesMatch>

  • Modos de seguridad avanzada para .htaccess. Existen muchos más, pero sólo voy a nombrar los que me han parecido más útiles para trabajar con wordpress. El primer código sirve para cambiar el index.php por otra página que queramos:

# alternativa al index por defecto
DirectoryIndex otrapagina.html

  • Permitir el acceso sólo a una determinada IP. Esto nos va a ir bien si queremos que nadie acceda al wp-admin, por ejemplo. Asignamos nuestra IP y se acabó. En el ejemplo, vemos que sólo la IP 80.78.2.35 es la que tendrá acceso al wp-admin. Esto es mucho más efectivo que cualquier plugin pero, desgraciadamente, una gran mayoría de gente tiene ip dinámica. Una solución sería darse de alta en algún servicio gratuito de IP estática y el problema quedaría solventado.

# deniega acceso a todos excepto a la ip que indica
<Limit GET POST PUT>
order deny,allow
deny from all
allow from 80.78.2.35
allow from .*domain\.com.*
</Limit>

  • Si estáis en una empresa liados con un proyecto en WP, o bien, dispones de una pequeña red doméstica, puedes limitar tu blog sólo a la LAN local:

# limitar el acceso a local area network
<Limit GET POST PUT>
order deny,allow
deny from all
allow from 192.168.0.0/33
</Limit>

  • Si estás mirando las estadísticas y recibes la visita periódica de un dominio sospechoso que no te gusta ni un pelo, puedes quitártelo del medio con el siguiente código (sustituyendo los nombres que ves por los que se reflejan en las estadísticas o los que consideres):

# bloqueo de visitantes a traves del dominio
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} dominiotocapelotas\.com [NC,OR]
RewriteCond %{HTTP_REFERER} dominiosospechoso\.com [NC,OR]
RewriteRule .* - [F]
</ifModule>

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *