Назад

February 16, 2025

🚫 Як запобігти хотлінкінгу зображень за допомогою .htaccess

Одним із способів знищити пропускну здатність свого сайту та сповільнити його завантаження є відсутність захисту від хотлінкінгу.

❓ Що таке хотлінкінг?

Хотлінкінг (hotlinking) — це вставка файлу (зазвичай зображення) з іншого сервера без дозволу власника. Іншими словами, сайт A використовує ресурс із сайту B, витрачаючи його трафік.

Чому це проблема?

Сайти можуть хотлінкувати файли з твого сервера з різних причин — від безневинних до шкідливих:

  • Оновлюваний файл — наприклад, логотип або банер, що змінюється.
  • Крадіжка контенту — сайт використовує твої зображення, не завантажуючи їх на свій сервер.
  • Зловмисний трафік — використання чужого хостингу для економії своїх ресурсів.

Тому варто запобігати такій ситуації!

🛑 Блокування всіх хотлінкерів

Щоб заборонити всім сайтам хотлінкувати зображення, окрім твого:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com(/)?.*$ [NC]
RewriteRule .*\.(gif|jpe?g|png|webp)$ [F,NC]

Що це робить?

  • RewriteEngine on — увімкнення модуля перезапису (mod_rewrite).
  • RewriteCond %{HTTP_REFERER} !^$ — дозволяє завантаження для користувачів без HTTP_REFERER.
  • RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com(/)?.*$ [NC] — дозволяє доступ лише з твого домену.
  • RewriteRule .*.(gif|jpe?g|png|webp)$ [F,NC] — блокує доступ (F = Forbidden) до зображень.

Дозволяємо лише конкретним сайтам

Якщо хочеш дозволити завантаження тільки для партнерських сайтів:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?friend1domain\.com(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?friend2domain\.com(/)?.*$ [NC]
RewriteRule .*\.(gif|jpe?g|png|webp)$ [F,NC]

Тут тільки friend1domain.com та friend2domain.com можуть використовувати твої зображення.

Відображення кастомного зображення

Якщо ти хочеш відправляти зловмисникам інше зображення замість справжнього, наприклад "stop-stealing-my-images.jpg":

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com(/)?.*$ [NC]
RewriteRule .*\.(gif|jpe?g|png|bmp)$ /images/stop-stealing-my-images.jpg [L,NC]

Тепер усі, хто хотлінкує твої зображення, отримають заміну замість оригінального контенту.

🔐 Захист інших файлів

Хотлінкінг можливий не тільки для зображень, а й для файлів CSS, JS, PDF та інших.

Щоб обмежити доступ до CSS, JavaScript і PDF, використовуй це правило:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com(/)?.*$ [NC]
RewriteRule .*\.(css|js|pdf)$ [F,NC]

Це заборонить підвантажувати твої стилі, скрипти та документи на інших сайтах.

✅ Коли .htaccess і mod_rewrite актуальні?

  • Якщо твій сайт працює на Apache (багато shared-хостингів і VPS використовують Apache).
  • Якщо ти не використовуєш CDN або твоя CDN не має власного захисту від хотлінкінгу.
  • Якщо тобі потрібно гнучке керування доступом до зображень (наприклад, дозволяти доступ тільки для певних сайтів).

⚠️ Коли .htaccess може бути не найкращим рішенням?

  1. Сучасні CDN (Cloudflare, Fastly, BunnyCDN) можуть блокувати хотлінкінг самостійно
    • Наприклад, у Cloudflare можна увімкнути “Hotlink Protection” без додаткових правил.
    • Якщо ти використовуєш Cloudinary або Imgix для зображень, у них теж є вбудовані обмеження.
  2. Якщо твій сайт працює на Nginx
    • .htaccess не працює на Nginx, тому тобі потрібні окремі правила для nginx.conf:
      location ~* \.(gif|png|jpe?g)$ {
          valid_referers none blocked yourdomain.com *.yourdomain.com;
          if ($invalid_referer) {
              return 403;
          }
      }
      
  3. Сайти, що використовують S3 та інші об’єктні сховища
    • У Amazon S3, DigitalOcean Spaces є власні методи обмеження доступу.

🔥 Чи варто включати .htaccess блокування у 2025 році?

  • Так, якщо твій сайт працює на Apache і у тебе немає іншого захисту (наприклад, Cloudflare або CDN).
  • Так, якщо ти хочеш гнучко керувати дозволами для конкретних доменів.
  • Якщо у тебе CDN або Nginx — краще використовувати їхні налаштування.

🏁 Висновок

  • Хотлінкінг витрачає трафік твого сайту, що може сповільнити його роботу
  • .htaccess дозволяє легко блокувати хотлінкінг зображень, стилів, скриптів та інших файлів
  • Можна не тільки забороняти але й замінювати хотлінковані зображення на власні.
  • Регулярно перевіряй логи сервера щоб знайти можливі випадки хотлінкінгу.

Не дозволяй іншим красти твій контент!