Подтвердить что ты не робот

Блокировать изображения, CSS или JS, если пользователь не посетил мой сайт

У меня внезапно появилось много запросов на мой сайт (wget, curl и т.д.).

Я не хочу, чтобы какой-либо из этих запросов выполнялся , если пользователь не посетил мой сайт хотя бы один раз, используя действительный браузер (например, Firefox или Chrome).

Есть ли модуль Apache для этого? Что я могу сделать?

4b9b3361

Ответ 1

Концепция проста: создайте токен, который будет использоваться в файлах, которые вы хотите защитить. Эта Этот токен (такой как "abc123" - сохраненный в сеансе, а не файлы cookie) будет использоваться в каждом загружаемом файле. Таким образом, если токен не совпадает с файлом, вы можете перенаправить на страницу, которая не найдена или недоступна.

Установите маркер в index.php:

<?php
  session_start();
  header("Cache-Control: no-cache, must-revalidate");
  header("Expires: Mon, 10 Oct 2005 05:00:00 GMT");
  $_SESSION['siteToken'] = "abc123";
?>

<html>
<head> 
  <link rel="stylesheet" type="text/css" href="/style.css" />
</head>
<body>

Теперь для файлов CSS и JavaScript вам нужно проверить токен, чтобы убедиться, что он установлен, и это правильное значение.

// style.css
<?php
  session_start();
  header("Content-type: text/css");
  header("Cache-Control: no-cache, must-revalidate");
  header("Expires: Mon, 10 Oct 2005 05:00:00 GMT");
  if($_SESSION["siteToken"] != "abc123") {
    session_regenerate_id();
    die(); // or redirect
  } 
?>
body { background-color: #000; color: #fff; }
etc...

Вы делаете то же самое для файла JavaScript.

Следующий шаг, если вы обновите свой .htaccess, чтобы убедиться, что файл CSS и JavaScript правильно проанализирован:

RewriteEngine on
RewriteBase /
RewriteRule style.css style.php [NC,L]

Кроме того, вы можете добавить это в свой .htaccess для защиты плохих ботов от запросов файлов:

SetEnvIfNoCase User-Agent "^Wget" bad_bot
SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot
SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot
SetEnvIfNoCase User-Agent "^libwww-perl" bad_bot
#etc...
Deny from env=bad_bot

Теперь что касается изображений. Это решение будет работать, но оно будет медленнее, чем синтаксический анализ файлов CSS и JavaScript. Логика такая же, но вместо эха вы должны прочитать файл (используя readfile). Кроме того, вы должны изменить заголовок на основе расширения файла.

Альтернативой для этого будет установка этого в файле .htaccess:

RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?domain.com [NC]
RewriteRule \.jpg$ - [NC,F,L]

Хотя, это не пуленепробиваемый.