Запретить хотлинкинг на Nginx

Я пытаюсь защитить свои изображения от хотлинкинга. Мой первый подход заключался в следующем:

location ~* \.(png|jpg)$ {
    valid_referers none blocked server_names;
    if ($invalid_referer) {
        return 403;
    }
}

Проблема здесь в теге none , потому что, если вы вводите URL-адрес напрямую, ссылки не будет. Таким образом, каждый веб-сайт может показывать мои изображения, если пользователь вводит URL-адрес напрямую. Поэтому я удалил тег none , и, к удивлению, он все еще работает на моем веб-сайте.

Если я ввожу свой URL напрямую, он все еще работает. Но почему?

Теперь мой референт пуст, но я все еще могу видеть свои изображения. Это определенно работает из-за тега server_names , но насколько я понимаю, server_names означает, что если у кого-то есть имя моего сервера в реферере, они могут показать мои изображения. Но если я ввожу свой URL напрямую, у меня не будет ссылки.

Может ли кто-нибудь мне это объяснить?

0
задан 2 December 2017 в 11:45
1 ответ

Это хорошо объяснено в документации для valid_referers :

  • none

    поле Referer отсутствует в заголовке запроса;

  • заблокировал

    поле Referer присутствует в заголовке запроса, но его значение был удален брандмауэром или прокси-сервером; такие ценности строки, которые не начинаются с http: // или https:// ;

  • server_names

    поле заголовка запроса Referer содержит один из серверов names;

Он ведет себя так, как и предполагалось: none разрешает запрос без какого-либо referer и server_names referers, совпадающим с именами вашего сервера.

Эта настройка предназначена для предотвращения хотлинкинга, т.е. встраивание ваших изображений на другие сайты. Это не должно препятствовать просмотру изображений, если вы знаете URL-адрес, например, если вы ищете его в источнике страницы.

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

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

1
ответ дан 4 December 2019 в 16:04

Теги

Похожие вопросы