Запрет размещения своих картинок на сторонних сайтах (Hotlinking)

Hotlinking (хотлинкинг) — это практика, при которой внешние сайты напрямую ссылаются на изображения или другие медиа-ресурсы, расположенные на другом сайте, без загрузки этих ресурсов на собственный сервер. Таким образом, владелец исходного ресурса вынужден тратить дополнительные ресурсы своего сервера (пропускную способность и вычислительные мощности) на обслуживание чужих сайтов.

Проблема хотлинкинга


  • Увеличенная нагрузка на сервер владельца оригинального ресурса.
  • Нарушение авторских прав и интеллектуальной собственности.
  • Потеря контроля над контентом, включая качество и внешний вид изображений.

Способы борьбы с хотлинком


Использование заголовка Referer
Самый распространённый метод заключается в проверке заголовка Referer, отправляемого браузером. Если запрос поступает с другого домена, сервер отклоняет этот запрос.

Пример конфигурации для Nginx:
location ~* \.(jpg|jpeg|gif|png|bmp|ico|webp)$ {
    valid_referers none blocked server_names ~\.google\. ~\.yandex\.;

    if
...

Nginx: Strict-Transport-Security

Заголовок Strict-Transport-Security (HSTS) — это механизм безопасности, который позволяет веб-сайтам объявить браузерам, что они должны взаимодействовать только через HTTPS. Это помогает предотвратить атаки, такие как downgrade-атаки, когда злоумышленник пытается заставить пользователя использовать небезопасное HTTP-соединение.

Как работает HSTS


Когда браузер получает заголовок HSTS от сервера, он запоминает, что этот сайт должен всегда открываться через HTTPS. В течение указанного времени (например, 1 год) браузер будет автоматически перенаправлять все запросы к этому сайту на HTTPS, даже если пользователь вводит HTTP-адрес.

Формат заголовка HSTS:
Strict-Transport-Security: max-age=<seconds>; includeSubDomains; preload;

  • max-age: Указывает, как долго браузер должен помнить, что сайт доступен только по HTTPS (в секундах).
  • includeSubDomains: Указывает, что HSTS применяется ко всем поддоменам сайта.
  • preload: Указывает, что сайт участвует в программе preload HSTS, что позволяет браузерам
...

Nginx: Играет ли роль место блока location в конфигурации?

Да, расположение блока location в конфигурационном файле Nginx играет важную роль. Блоки location обрабатываются в определенном порядке, и их порядок может влиять на то, как Nginx обрабатывает запросы.

Порядок обработки блоков location


  1. Префиксные блоки: Сначала обрабатываются блоки  location  с префиксами (например, location /file/). Nginx выбирает блок с самым длинным совпадающим префиксом.
  2. Регулярные выражения: Если ни один префиксный блок не подходит, Nginx проверяет блоки с регулярными выражениями (например, location ~* \.php$). Эти блоки проверяются в порядке их появления в конфигурационном файле.
  3. Блок location /: Если ни один из предыдущих блоков не подходит, используется блок location /, который является "универсальным" блоком для всех запросов.

Пример конфигурации:
server {
    server_name example.com;
    root /var/www/html;

    location /file/ {
        rewrite ^/file/(.*)$ /access.php?file=$1 last;
    }

    location ~* \.php$ {
        include
...

Как запретить прямой просмотр изображений на PHP и Nginx

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

Обязательно к прочтению:


Зачем использовать PHP для контроля доступа?


PHP позволяет вам выполнять логику на стороне сервера перед тем, как вернуть изображение пользователю. Это дает вам возможность:
  • Проверять авторизацию: Убедиться, что пользователь авторизован для просмотра изображения.
  • Ограничивать доступ: Запрещать доступ к определенным изображениям для определенных пользователей или групп.
  • Логировать запросы: Записывать, кто и когда пытался
...

SiteMap.xml: xmlns="http://..." или xmlns="https://... "

XML
Кратко о том как в карте сайта (sitemap.xml) правильно писать строку:
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

Так: xmlns="http://..." или так: xmlns="https://... ".
Верно будет указывать XMLNS с использованием HTTP-схемы, так как схема http: традиционно поддерживается стандартом sitemaps.org и повсеместно принята в качестве стандартного формата.

Вот правильный вариант:
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

Хотя формально использование схемы  https:  тоже возможно, однако это менее распространено и чаще всего вызывает сомнения у некоторых парсеров и валидаторов. Поэтому для максимальной совместимости и уверенности лучше придерживаться классического варианта с http....