Защита файлов от прямых ссылок

Часто, при цитировании материала с вашего сайта, адреса изображений или загружаемых файлов не изменяют. Возникает нагрузка на ваш сервер, но при этом посетитель даже не знает, откуда загружается рисунок и не видит вашего сайта.

Наиболее гуманно будет выдавать посетителю другого сайта изображение с текстом "Это изображение доступно только на сайте www.example.com". Если ссылаются на загружаемый файл — перенаправлять на страницу загрузок вашего сайта.

Сделать это можно с помощью модуля ngx_http_referer_module: он будет анализировать поле "Referer" (ссылающаяся страница) в запросе посетителя и сравнивать со списком разрешенных доменов. Конечно, посетитель может подделать это поле в своем запросе, но это не так просто и обычно этого никто не делает.

Не стоит забывать, что некоторые сервисы могут использовать ваши картинки, принося вам пользу в виде трафика. Например, поиск по изображениям Google. Если вы в этом заинтересованы, обязательно включите домены таких сервисов в список разрешенных.

Кроме того, не стоит блокировать запросы без поля "Referer", очень часто за ними скрываются посетители вашего сайта с необычными браузерами или нестандартными настройками.

Для изображений:

server {
    ...
    
    location ~ \.(jpg|gif|png)$ {
        valid_referers none blocked server_names ~\.google\. images.yandex.ru;
	if ($invalid_referer) {
	    rewrite ^(.*)$ /img/invalid_referer.png redirect;
	}
    }
}

Благодаря этому коду, все посетители, которые хотят загрузить изображение, у которых в запросе присутствует поле "Referer", но оно не содержит имени вашего домена, домена Google или Yandex, все они увидят изображение из файла invalid_referer.png.

Для загружаемых файлов:

server {
    ...
    
    location /download/ {
        valid_referers none blocked server_names;
	if ($invalid_referer) {
	    rewrite ^(.*)$ /download.html redirect;
	}
    }
}

Если ссылку на ваш файл поставят на другом сайте, то посетитель перейдет на вашу страницу download.html и только уже с неё сможет перейти непосредственно к загрузке файла.

Ссылки