Evitando el Hot-linking

Protección básica frente al hot-linking

Aunque la mayoría de navegadores están evolucionando de cara a una mayor privacidad aplicando políticas por defecto más estrictas en cuanto al Referrer-Policy, aún se puede conseguir una protección básica frente al Hot-linking.

Para ello, tan sólo debes definir la cabecera TCDN-Avoid-Hotlink-URL con el path al recurso que quieras servir como placeholder.

Por ejemplo, si quieres evitar que hagan hot-linking con las imágenes que tenemos ubicadas en el path /wiki/contenido de tu dominio www.example.com , el código vcl a insertar en la configuración sería similar a:

sub vcl_recv {
if (req.http.host == "www.example.com") {
if(req.url ~ "^/wiki/contenido" && urlplus.get_extension() ~ "^(jpg|jpeg|png|gif|svg|mp4)$") {
set req.http.TCDN-Avoid-Hotlink-URL = "/img/hotlink-placeholder.png";
}
}
}

Como siempre, lo puedes definir en un nuevo bloque vcl_recv o en el ya existente.

Ahora, las peticiones contra esos recursos y con esas condiciones que tengan un referer distinto al dominio del site actual, servirán en su lugar el placeholder /img/hotlink-placeholder.png. Es obligatorio definir un placeholder.

Se pueden agregar todas las condiciones necesarias al código anterior, por ejemplo, si el dominio www.example2.com puede realizar hot-linking sin restricción alguna, el código quedaría así:

sub vcl_recv {
if (req.http.host == "www.example.com") {
if(
req.url ~ "^/wiki/contenido" &&
urlplus.get_extension() ~ "^(jpg|jpeg|png|gif|svg|mp4)$" &&
req.http.referer !~ "^https?://www.example2.com"
) {
set req.http.TCDN-Avoid-Hotlink-URL = "/img/hotlink-placeholder.png";
}
}
}

Por defecto, se incluyen las siguientes excepciones:

  • Por supuesto, si el referer coincide con el dominio actual, no aplica.

  • No es correcto definir TCDN-Avoid-Hotlink-URL con una cadena vacía o un path que no comience por "/", en el caso de hacerlo, se sustituirá por "/".

  • Algunos User-Agents están permitidos por defecto (buscadores y similares) para evitar perjudicar el posicionamiento.

  • Se excluyen los referers vacíos o que no incluyan el protocolo http(s), debido al Referrer Policy es poco práctico no hacerlo sin perjudicar al sitio web.