Назад | Перейти на главную страницу

nginx блокирует curl и wget

У меня есть веб-сервер nginx.
У меня есть сайт с богатым содержанием, и я обнаружил, что некоторые вредоносные боты пытаются сканировать мой контент. Я заблокировал любой curl или wget, приходящие на мой сайт вот так

if ($http_user_agent ~* (curl|wget)) { return  301 $scheme://www.google.com/; }

но я обнаружил, что могу получить доступ к контенту, если изменил --пользователь-агент в запросе на завиток, как показано ниже

curl --user-agent "Googlebot/2.1 (+http://www.google.com/bot.html)" http://example.com/mypage.php
ИЛИ
curl --user-agent "whatever" http://example.com/mypage.php

Любая идея, как я могу заблокировать любой запрос, созданный из curl или wget, используя Nginx независимо от отправленного поддельного пользовательского агента

Пользователь-агент

User-Agent всегда можно подделать. Есть и другие заголовки, которые вы можете проверить, но и их подделывают более умные боты. например Accept, Accept-Language, Connection и некоторые другие, которые не всегда используются для каждого типа объекта

Печенье

Менее интеллектуальные боты не будут должным образом принимать и отправлять файлы cookie, поэтому вы можете защитить некоторые ресурсы с помощью файлов cookie. Это может иметь последствия для конфиденциальности, которые вам следует учитывать.

Javascript

Некоторые боты не могут обрабатывать javascript. У вас может быть, так сказать, скрытая «головоломка» javascript, которая требует, чтобы браузер вычислил ответ на простую случайную математическую задачу. Это нарушит работу многих клиентов API Restful, если вы не найдете хитрый способ их исключить.

Аутентификация

Если у вас есть ресурсы, от которых вы хотите держать ботов подальше, вам нужно будет защитить эти ресурсы с помощью аутентификации.

Keep-Alive

Если вы уверены, что все, заходящие на ваш сайт, будут поддерживать keep-alive; включая прокси, то вы можете заблокировать соединения, которые его не поддерживают. Некоторые сочтут этот вариант необычным.

Непонятные параметры, которые также могут ограничивать браузеры и / или клиенты API.

Я также обнаружил, что некоторые боты не обрабатывают TLS1.2 + SNI, поскольку они часто используют более старые библиотеки, которые не поддерживают TLS1.2 и, что реже, SNI. Это ограничит возможность ваших пользователей использовать API на вашем сайте, если это актуально.

Я оставлю это на ваше усмотрение, чтобы исследовать, как вы можете протестировать и реализовать каждую из этих вещей и какие из них могут или не могут быть подходящими. Один размер не подходит для всех.

Украдено из Переполнение стека, вы можете разместить на своем веб-сайте URL-адрес, который недоступен по ссылке, но когда сканер увидит его, он попытается просканировать этот адрес. Это позволит вам заблокировать этого поискового робота.

<a style="display:none" href="./dontgohere.php">A</a>

После того, как вы укажете свои IP-адреса, вы можете использовать что-нибудь ngx_http_access_module для блокировки адресов или даже fail2ban. Есть несколько различных решений, которые вы можете использовать.

Однако, если вы блокируете строго по строкам пользовательского агента, это будет невозможно, как говорит Александр.

Это невозможно. curl и wget можно поставить любой user-agent и нет возможности узнать, кто сканирует ваш сайт.