RadioWordPress #23: Evitar hotlinking y protegernos del spam no referido

Hoy toca hotlinking y bloquear el spam no referido en nuestro WordPress. Disculpad, pero en el audio digo capítulo 22, ya pierdo la cuenta 🙂

Código para evitar el hotlinking no sirviendo nada

<IfModule mod_rewrite.c>
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://([^.]+\.)?dominio\.com [NC]
RewriteRule \.(gif|jpe?g?|png)$ - [NC,F,L]
</IfModule>

Código para evitar el hotlinking sirviendo la imagen norobar.jpg

<IfModule mod_rewrite.c>
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://([^.]+\.)?dominio\.com [NC]
RewriteCond %{REQUEST_FILENAME} !norobar.jpg [NC]
RewriteRule \.(gif|jpe?g?|png)$ /norobar.jpg [NC,R,L]
</IfModule>

Para bloquear el spam no referido podremos usar este código en el .htaccess

# BLOQUEO SPAM NO REFERIDO
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_REFERER} !^http(s)?://([^.]+\.)?eduardocollado\.com [NC]
RewriteCond %{REQUEST_URI} /wp-comments-post\.php [NC]
RewriteRule .* - [F,L]
</IfModule>

Comprobación de http requests: https://www.hurl.it/

Transcripción

Vamos a empezar por ver cómo bloquar el hotlinking, para el que no lo sepa el hotlinking es el robo de ancho de banda.

El hotlinking consiste en cargar elementos en una web cuando el elemento en sí está en otro lugar diferente, al hacer esto el ancho de banda del objeto cargado se contabilizará en el servidor remoto pues se carga desde ahí.

¿Esto en qué nos afecta? pues en que si lo permitimos puede haber otras webs por ahí que utilicen nuestros ficheros y por tanto nuestro ancho de banda para mostrar imagenes o cualquier cosa en su web y al final eso repercute en que nosotros tendremos que pagar esa factura de transferencia excedida.

Por ejemplo, si alguien quiere insertar una imagen en su web y ve que nosotros ya la tenemos en nuestro WordPress, pueden simplemente copiar la ubicación de nuestra foto e insertarla en sun web, de esta forma cuando carguen su web se cargará la imagen desde nuestro servidor haciendo que se consuma nuestro ancho de banda y nuestros recursos del servidor donde estemos.

Que no cuanda el pánico porque podemos prevenirnos y evitar el hotlinking, simpelemente modificando nuestro fichero .htaccess. Tenemos dos opciones, la primera consiste en evitar que cargue la foto en cualquier web que no sea la nuestra y la segunda es muchísimo más poética y lo que vamos a hacer es cargarles una imagen específica, por ejemplo una imagen que salga Bart Simpson copiando en la pizarra «Robar ancho de banda de otras webs está mal», esto no evitará que se consuma nuestro ancho de banda, pero sí el que lo intente hará lo posible para que no salga esa imagen.

El primer código de htaccess lo que hará será que cada vez que se intente cargar un gif, un png o un jpg, en cualquiera de sus posibilidades, no mostrará nada, no cargará ninguna imagen si el referer es algo que no sea nuestro dominio

<IfModule mod_rewrite.c>
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://([^.]+\.)?dominio\.com [NC]
RewriteRule \.(gif|jpe?g?|png)$ - [NC,F,L]
</IfModule>

La segunda opción lo que hará será mostrar la imagen norobar.jpg cuando se intente cargar un gif, un png o un jpg, en cualquiera de sus posibilidades, obviamente permitiremos cargar la imagen norobar.jpg, sólo permitiremos cargar esa si el referer es algo que no sea nuestro dominio

<IfModule mod_rewrite.c>
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://([^.]+\.)?dominio\.com [NC]
RewriteCond %{REQUEST_FILENAME} !norobar.jpg [NC]
RewriteRule \.(gif|jpe?g?|png)$ /norobar.jpg [NC,R,L]
</IfModule>

Ahora vamos a pasar a otro tema, a protegernos del spam no referido.

El spam no referido son todos aquellos comentarios que comentan directamente sin pasar por el post asociado, eso se hace llamando directamente al fichero de comentarios.

La opción más sencilla para evitar el spam no referido es el fichero .htaccess, el cual como estáis vioendo es como una navaja suiza, es fantástico porque hace de todo.

La forma sería bloquear el acceso a wp-commetns-post.php desde cualquier sitio que no sea la propia URL, en mi caso el trozo de código del htaccess que hace esa función os la dejo en las notas del programa.

# BLOQUEO SPAM NO REFERIDO
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_REFERER} !^http(s)?://([^.]+\.)?eduardocollado\.com [NC]
RewriteCond %{REQUEST_URI} /wp-comments-post\.php [NC]
RewriteRule .* - [F,L]
</IfModule>

Resulta extremadamente molesto el ver comentarios por todas partes, aunque sean de spam, porque al final por mucho Akismet que tengamos esos comentarios son procesados por php y por tanto consumen recursos del servidor, y lo que queremos es reducir el consumo del servidor en todo lo posible.

Vosotros pensar que cuanto más optimizadas tengáis las webs menos vais a pagar en vuestro hosting pues estaréis usando menos recursos y cuanto más seguras las tengáis menos problemas vais a tener, menos incidencias, menos de todo y vuestra web estará siempre perfecta.