Хостинг. https и защита от хотлинкинга

Alik
9 років
0
Обратил сегодня внимание на то, что если сайт открыт по https и картинки на его страницах вставлены по адресу с https, то все в порядке.
Если сайт работает на https, а картинки указаны в этом же домене, но по http, то срабатывает защита от хотлинкинга и в ответ отдается 403 Forbidden.
Пример в работе — мой сайт в домене com (хорошо заметно по файлу empty.gif).
rudenko
9 років
0
Программисты в ближайшее время исправят ошибку.
eugen
9 років
0
Это особенность работы http/https в браузерах. Если страница, загруженная по https пытается загрузить дополнительный элемент (картинку/скрипт/css etc) по http - браузер не будет в таком случае передавать заголовок Referer при запросе этого контента. А в настройках Hotlink у Вашего сайта отключен флаг "Разрешить прямые запросы", что и блокирует такие запросы без Referer.

В целом, флаг "Разрешить прямые запросы" лучше не отключать без острой необходимости. И уж точно не следует на https странице подключать контент по http - открытие такой страницы уже не считается безопасным соединением и в зависимости от браузера может:
- блокироваться загрузка контента по http
- выдаваться alert вроде "соединение небезопасно"
- зеленый замок https будет становиться серым со знаком предупреждения
Alik
9 років
0
Это особенность работы http/https в браузерах.© eugen

Теперь понятно, спасибо за разъяснение.

В целом, флаг "Разрешить прямые запросы" лучше не отключать без острой необходимости.© eugen

Я с ним еще одну интересную особенность нашел. Не ошибка, но напишу на случай, если кто-то с таким столкнется и не будет знать, в чем причина.
Есть скрипт, на который при помощи GET-запроса передается дважды urlencoded адрес картинки (такой себе кэширующий прокси для вывода на https-сайт картинок с хостов, где поддержки https нет). Через mod_rewrite обращения вида script.php?url=example.com/image.png преобразуются в /image/example.com/image.png. Так вот при отключенных прямых запросах в защите от хотлинкинга эти запросы перехватывает nginx и отдает HTTP 403. Решается включением прямых запросов.
Тема закрита.