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.