Доступ к изображению только для конкретных сайтов (белый список)

Задача: сделать сервис на подобии habrastorage, но только не отдельным сайтом, а сабдоменом типа (files.site.com).

Пояснение: на самом сайте (site.com) будет так же располагаться другие сервисы типа (news.site.com, blog.site.com и т.п.).

Вопрос: Как и чем лучше организовать доступ к изображениям (загруженных на files.site.com) к другим сервисам и что бы они были доступны только для сайта site.com и его сабдоменов (белый список). Другие ресурсы типа (site2.com, site777.com и т.д.) не могли использовать мои изображения по ссылке, а так же скачивать их.

Пожелание: было бы здорово найти решение на php.
  • Вопрос задан
  • 2579 просмотров
Решения вопроса 2
nowm
@nowm
Если у вас Apache в качестве веб-сервера, можно не нагружать PHP выяснением того, кто откуда пытается загрузить картинку. Ведь в случае PHP вам все-все картинки придётся отдавать PHP-скриптом — это какая-то лишняя нагрузка.

С помощью .htaccess можно сделать примерно такой вариант (файл .htaccess в корне сайта files.domain.com):

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_REFERER} !domain\.com$ [NC]
RewriteRule .* - [R=404,L]


Я могу ошибаться немного в регулярных выражениях, но суть, я думаю, понятна: проверяем, чтобы строка %{HTTP_REFERER} заканчивалась на «domain.com» (сюда попадут и «domain.com» и «www.domain.com» и «image.domain.com» и «любойподдомен.domain.com»). Если реферер не подходит под это определение, редиректим на страницу 404.

%{HTTP_REFERER} — это содержимое HTTP-заголовка Referer.

С другой стороны, Referer можно легко подделывать с помощью PHP, и злоумышленник может написать на PHP простой прокси, который будет по своим адресам отдавать ваши картинки, отправляя вам легитимное значение поля Referer.
Ответ написан
@ofl Автор вопроса
Xu4, Спасибо за подсказку, разобрался
www.netangels.ru/support/hosting-howto/htaccess-block

RewriteEngine on
RewriteCond %{HTTP_REFERER} banurl1.ru [NC,OR]
RewriteCond %{HTTP_REFERER} banurl2.ru [NC,OR]
RewriteRule \.(jpg|jpeg|png|gif)$ - [F]
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
вам решение нужно на уровне web сервера. в php разве что можете организовать api для работы с вашим микро-cdn-ом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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