Как удержать ботов и пауков от потребления ресурсов моего сервера? - PullRequest
0 голосов
/ 30 июня 2018

Мой PHP-скрипт считает уникальных посетителей. Количество по сравнению с Google Analytics было абсурдным; 30 000 в день, но Analytics считает 2000. 2000 - правильное число, поэтому я добавил условие в свой скрипт, чтобы избежать подсчета ботов и пауков.

Я также заставил его идентифицировать ботов; чуть более 1 минуты у меня было более 100. Память ограничена, и боты потребляют ресурсы, я хочу этого избежать. Мой robots.txt:

# Allow Google, Yahoo and Bing to crawl all beside of /admin/
User-agent: Googlebot 
User-agent: Yahoo! Slurp
User-agent: msnbot 
Disallow: /admin/ 
Disallow: /analitics/
Disallow: /class/
Allow: / 

# Disallow all other to crawl everywhere
User-agent: * 
Disallow: / 

Есть ли способ предотвратить столько запросов? Я не против сканера Google или Bing, но это смешно. Образец:

es ip:40.77.167.161 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
pt ip:40.77.167.178 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
pt ip:40.77.167.178 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
pt ip:40.77.167.178 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.140 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
pt ip:40.77.167.177 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
pt ip:40.77.167.191 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
pt ip:40.77.167.178 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)

1 Ответ

0 голосов
/ 01 июля 2018

Во-первых, мы должны различать ботов, которые правильно объявляют, и ботов, которые утверждают, что кто-то еще. Есть много ботов, которые действуют как другие боты по разным причинам (не только плохие). Среди группы ботов, которые объявляют кого-то еще, есть подгруппа, которая также игнорирует robots.txt.

В вашем случае, похоже, у нас есть настоящий бот от Microsoft.

Боты подчиняются robots.txt

IP-адреса на самом деле являются правильными IP-адресами от Bing. Microsoft объясняет, что для выяснения , действительно ли IP-адрес принадлежит им , мы должны использовать nslookup.

Это дает нам:

$ nslookup 40.77.167.87
87.167.77.40.in-addr.arpa   name = msnbot-40-77-167-87.search.msn.com.

$ nslookup msnbot-40-77-167-87.search.msn.com
[...]
Non-authoritative answer:
Name:   msnbot-40-77-167-87.search.msn.com
Address: 40.77.167.87

Microsoft не приводит четкого примера того, какое имя их бот будет слушать в файле robots.txt , но я думаю, что они хотят видеть bingbot, а не msnbot.

Примечание

Bingbot , найдя для себя определенный набор инструкций, будет игнорировать директивы, перечисленные в общем разделе, поэтому вам потребуется повторить все общие директивы в дополнение к созданным вами специальным директивам. для них в их собственном разделе файла.

[...]

  1. Боты упоминаются как пользовательские агенты в файле robots.txt. [...]

(выделение мной)

С другой стороны, Microsoft ссылается на База данных роботов для получения списка допустимых имен роботов, в котором Bingbot вообще не указан (только msnbot, который вы уже используете).

Тем не менее, я бы попытался добавить bingbot к вашим пользовательским агентам в файле robots.txt и посмотреть, поможет ли это.

Вы не указали фактический путь, запрошенный в каждом запросе. Кажется, существуют ситуации , когда Microsoft Bingbot не может быть заблокирован с помощью robots.txt .

Боты не подчиняются robots.txt

Для ботов, которые не подчиняются robots.txt, вы можете использовать только обнаружение на стороне сервера. Вы можете либо заблокировать их по их IP-адресу (если вы видите, что запросы поступают с одного и того же IP-адреса все время), либо по их пользовательскому агенту (если они все время объявляют как один и тот же пользовательский агент).

например. некоторые веб-сайты блокируют user-agent scrapy на стороне сервера (и возвращают пустую страницу или 404 или аналогичный), потому что это значение по умолчанию, используемое популярной структурой веб-очистки.

Вы также можете автоматически реализовать блокировку на основе IP, например, если вы видите более k запросов за x часов, то вы блокируете этот IP на следующие 10 * x часов. Конечно, это может привести к ложным срабатываниям, если IP-адрес принадлежит интернет-провайдеру потребителя, поскольку он часто дает один и тот же IP-адрес разным пользователям. Это означает, что вы можете блокировать обычных пользователей. Тем не менее, если у вас 2000 посетителей в день, я предполагаю, что риск того, что два посетителя вашего сайта имеют один и тот же IP-адрес и заблокирован из-за слишком большого количества запросов, низкий.

...