У меня очень серьезные проблемы с ботами на некоторых моих сайтах в моей учетной записи хостинга. Боты используют более 98% ресурсов моего процессора и 99% пропускной способности для всей моей учетной записи хостинга. Эти боты генерируют более 1 ГБ трафика в час для моих сайтов. Реальный человеческий трафик для всех этих сайтов составляет менее 100 МБ / месяц .
Я провел обширные исследования обоих файлов robots.txt и .htaccess, чтобы заблокировать этих ботов, но все методы не сработали.
Я также поместил код в файлы robots.txt, чтобы заблокировать доступ к каталогам сценариев, но эти боты (Google, MS Bing и Yahoo) игнорируют правила и в любом случае запускают сценарии.
Я не хочу полностью блокировать роботов Google, MS Bing и Yahoo, но хочу ограничить скорость сканирования. Кроме того, добавление оператора Crawl-delay в файл robots.txt не замедляет работу ботов. Мои текущие коды robots.txt и .htacces для всех сайтов указаны ниже.
Я настроил инструменты Microsoft и Google для веб-мастеров, чтобы снизить скорость сканирования до абсолютного минимума, но они по-прежнему используют эти сайты со скоростью 10 посещений в секунду.
Кроме того, каждый раз, когда я загружаю файл, который вызывает ошибку, весь веб-сервер VPS отключается в течение нескольких секунд, так что я даже не могу получить доступ к сайту, чтобы исправить проблему из-за атаки этих ботов.
Что я могу сделать, чтобы остановить трафик на мои сайты?
В последние месяцы я много раз пытался спросить мою веб-хостинговую компанию (site5.com) об этой проблеме, и они не могут помочь мне с этой проблемой.
Что мне действительно нужно, так это запретить ботам запускать скрипт rss2html.php. Я пробовал обе сессии и куки, и оба не удалось.
robots.txt
User-agent: Mediapartners-Google
Disallow:
User-agent: Googlebot
Disallow:
User-agent: Adsbot-Google
Disallow:
User-agent: Googlebot-Image
Disallow:
User-agent: Googlebot-Mobile
Disallow:
User-agent: MSNBot
Disallow:
User-agent: bingbot
Disallow:
User-agent: Slurp
Disallow:
User-Agent: Yahoo! Slurp
Disallow:
# Directories
User-agent: *
Disallow: /
Disallow: /cgi-bin/
Disallow: /ads/
Disallow: /assets/
Disallow: /cgi-bin/
Disallow: /phone/
Disallow: /scripts/
# Files
Disallow: /ads/random_ads.php
Disallow: /scripts/rss2html.php
Disallow: /scripts/search_terms.php
Disallow: /scripts/template.html
Disallow: /scripts/template_mobile.html
.htaccess
ErrorDocument 400 http://english-1329329990.spampoison.com
ErrorDocument 401 http://english-1329329990.spampoison.com
ErrorDocument 403 http://english-1329329990.spampoison.com
ErrorDocument 404 /index.php
SetEnvIfNoCase User-Agent "^Yandex*" bad_bot
SetEnvIfNoCase User-Agent "^baidu*" bad_bot
Order Deny,Allow
Deny from env=bad_bot
RewriteEngine on
RewriteCond %{HTTP_user_agent} bot\* [OR]
RewriteCond %{HTTP_user_agent} \*bot
RewriteRule ^.*$ http://english-1329329990.spampoison.com [R,L]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
# Don't show directory listings for directories that do not contain an index file (index.php, default.asp etc.)
Options -Indexes
<Files http://english-1329329990.spampoison.com>
order allow,deny
allow from all
</Files>
deny from 108.
deny from 123.
deny from 180.
deny from 100.43.83.132
ОБНОВЛЕНИЕ, ЧТОБЫ ПОКАЗАТЬ ДОБАВЛЕННЫЙ ПОЛЬЗОВАТЕЛЬСКИЙ АГЕНТ BOT CHECK CODE
<?php
function botcheck(){
$spiders = array(
array('AdsBot-Google','google.com'),
array('Googlebot','google.com'),
array('Googlebot-Image','google.com'),
array('Googlebot-Mobile','google.com'),
array('Mediapartners','google.com'),
array('Mediapartners-Google','google.com'),
array('msnbot','search.msn.com'),
array('bingbot','bing.com'),
array('Slurp','help.yahoo.com'),
array('Yahoo! Slurp','help.yahoo.com')
);
$useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
foreach($spiders as $bot) {
if(preg_match("/$bot[0]/i",$useragent)){
$ipaddress = $_SERVER['REMOTE_ADDR'];
$hostname = gethostbyaddr($ipaddress);
$iphostname = gethostbyname($hostname);
if (preg_match("/$bot[1]/i",$hostname) && $ipaddress == $iphostname){return true;}
}
}
}
if(botcheck() == false) {
// User Login - Read Cookie values
$username = $_COOKIE['username'];
$password = $_COOKIE['password'];
$radio_1 = $_COOKIE['radio_1'];
$radio_2 = $_COOKIE['radio_2'];
if (($username == 'm3s36G6S9v' && $password == 'S4er5h8QN2') || ($radio_1 == '2' && $radio_2 == '5')) {
} else {
$selected_username = $_POST['username'];
$selected_password = $_POST['password'];
$selected_radio_1 = $_POST['group1'];
$selected_radio_2 = $_POST['group2'];
if (($selected_username == 'm3s36G6S9v' && $selected_password == 'S4er5h8QN2') || ($selected_radio_1 == '2' && $selected_radio_2 == '5')) {
setcookie("username", $selected_username, time()+3600, "/");
setcookie("password", $selected_password, time()+3600, "/");
setcookie("radio_1", $selected_radio_1, time()+3600, "/");
setcookie("radio_2", $selected_radio_2, time()+3600, "/");
} else {
header("Location: login.html");
}
}
}
?>
Я также добавил следующее в начало сценария rss2html.php
// Checks to see if this script was called by the main site pages, (i.e. index.php or mobile.php) and if not, then sends to main page
session_start();
if(isset($_SESSION['views'])){$_SESSION['views'] = $_SESSION['views']+ 1;} else {$_SESSION['views'] = 1;}
if($_SESSION['views'] > 1) {header("Location: http://website.com/index.php");}
источник
robots.txt
? Роботам может потребоваться время, чтобы прочитать обновленную версию.rss2html.php
используется ваш сайт? через PHP включить, перенаправить, Ajax ....?file_get_contents
...? Кажется довольно странным. Файл находится на другом сервере или что-то?Ответы:
Если
rss2html.php
клиент не использует его напрямую (то есть, если PHP всегда использует его, а не ссылку или что-то в этом роде), тогда забудьте о попытке заблокировать ботов. Все, что вам действительно нужно сделать, это определить константу или что-то на главной странице, а затемinclude
другой скрипт. В другом сценарии проверьте, определена ли константа, и выдайте ошибку 403 или пустую страницу или что-то еще, если она не определена.Теперь, чтобы это работало, вам придется использовать
include
вместоfile_get_contents
, так как последний будет либо просто читать в файле (если вы используете локальный путь), либо запускаться в совершенно другом процессе (если вы использовать URL). Но это такой метод, как Joomla! используется для предотвращения непосредственного включения сценария. И используйте путь к файлу, а не URL, чтобы код PHP еще не анализировался до того, как вы попытаетесь его запустить.Еще лучше было бы
rss2html.php
выйти из-под корня документа, но некоторые хосты затрудняют это. Будет ли это вариант, зависит от настроек вашего сервера / хоста.источник
Вы можете настроить свой скрипт на выдачу ошибки 404 на основе строки агента пользователя, предоставленной ботами - они быстро получат подсказку и оставят вас в покое.
Просматривайте свои логи и отклоняйте Bingbot и т. Д. Аналогичным образом - это не остановит запросы, но может сэкономить пропускную способность - дайте googlebot почувствовать вкус его собственного лекарства - Mwhahahahaha!
обновленный
Глядя на ваш код, я думаю, что ваша проблема здесь:
Если они злонамеренные боты, то они могут прийти откуда угодно, уберите это
$ipaddress
предложение и бросьте в них ответ 301 или 404.Думая прямо на стороне коробки
Робот Google не понимает формы или javascript, поэтому вы можете динамически генерировать свои ссылки или позволить пользователям нажимать кнопку для доступа к вашему коду (с соответствующим токеном).
<a href="#" onclick="document.location='rss2html.php?validated=29e0-27fa12-fca4-cae3';">Rss2html.php</a>
источник
Ограничение PHP / блокировка запросов веб-сайтов для пауков / ботов / клиентов и т. Д.
Здесь я написал функцию PHP, которая может блокировать нежелательные запросы, чтобы уменьшить трафик вашего сайта. Хорошо для пауков, ботов и раздражающих клиентов.
КЛИЕНТ / Bots Blocker
ДЕМО: http://szczepan.info/9-webdesign/php/1-php-limit-block-website-requests-for-spiders-bots-clients-etc.html
КОД:
источник
Вероятно, ваш сайт индексируется поддельными ботами Google. Вы можете попробовать добавить чек и обслуживать 404 для всех поддельных запросов ботов Google.
Вот статья, которая объясняет, как проверить Googlebot: http://googlewebmastercentral.blogspot.com/2006/09/how-to-verify-googlebot.html
Также вы можете проверить свои записи по известным поддельным ботам: http://stopmalvertising.com/security/fake-google-bots.html
источник
Прежде всего, вы должны убедиться, что любая страница, запрошенная у пользовательского агента, какого бы вредоносного сканера вы ни имели, будет обслуживаться статической страницей.
Apache mod_rewrite с условием или эквивалентом вашего http-сервера. Для Apache, что-то вроде этого:
источник
Чтобы продолжить на пост smassey, вы можете поставить несколько условий:
Таким образом, боты по-прежнему обращаются к вашим страницам, но только не к этому. Странно, что (законные) боты не соблюдают правила, есть ли у вас какие-либо рефереры, которые отправляют ботов на вашу страницу из других источников (переадресация доменного имени, ...)
источник
Я решил ту же проблему с помощью скрипта, доступного по адресу http://perishablepress.com/blackhole-bad-bots/ . При таком подходе к «черной дыре» я собрал список вредоносных ip, а затем, используя .htaccess, запретил их. (Это не является обязательным, поскольку сам скрипт выполняет запрет. Но мне нужно уменьшить нагрузку на сервер, избегая разбора php для известных нежелательных ips), за три дня мой трафик снизился с 5 ГБ в день до 300 МБ, что вполне ожидаемо.
Проверьте эту страницу также для полного списка правил htaccess, чтобы заблокировать много известных нежелательных ботов. http://www.askapache.com/htaccess/blocking-bad-bots-and-scrapers-with-htaccess.html
источник
Этот скрипт не делает то, что говорит комментарий, на самом деле он делает полную противоположность. Это всегда пропустит ботов, так как переменная сессии никогда не будет установлена, когда бот запрашивает ваш скрипт. Все, что он потенциально может сделать, - это запретить законным запросам (из index.php или mobile.php) вызывать скрипт более одного раза.
Чтобы запретить боту доступ к вашему сценарию, вы должны разрешить доступ, только если переменная сеанса (или cookie) действительно установлена. Предполагая, конечно, что (злонамеренный) бот не принимает куки. (Мы знаем, что настоящий робот Google не делает.)
Как уже упоминалось, размещение файла rss2html.php над корневым веб-сайтом (вне общедоступного веб-пространства) не позволит боту напрямую получить доступ к сценарию - но вы говорите, что это вызывает другие проблемы? Или поместите его в каталог и защитите этот каталог с помощью .htaccess. Или вы можете даже защитить сам файл в .htaccess от прямых запросов?
источник
Настройте свой домен на Cloudflare (бесплатный сервис для этого). Они блокируют вредоносных ботов на уровне домена, прежде чем они попадают на ваш сервер. Занимает около 20 минут, никогда не надо махать с кодом.
Я использую этот сервис на всех своих сайтах и на всех клиентских сайтах. Они выявляют вредоносных ботов на основе ряда методов, включая использование проекта Honey pot.
источник
Что вам нужно сделать, это установить сертификат SSL на вашем сервере для apache / nginx / email / ftp. Включите HSTS, а также вам нужно отредактировать файл ssl.conf, чтобы SSLv2 SSLv3 TLSv1 были отключены и не разрешали входящие подключения. Укрепите свой сервер правильно, и у вас не будет проблем с ботами.
источник