У нас есть MU (Multisite) установка Drupal7 здесь на работе, и мы пытаемся
временно сдерживать рой ботов, которых мы получаем, пока у нас не будет возможности загрузить наши
содержание. Я написал быстрый и грязный скрипт для отправки 503 заголовков, если мы найдем определенный
критерии в Xpath (это также можно сделать как strpos / preg_match, если DOM не сформирован).
Для того, чтобы заставить мяч катиться, мне нужно выяснить, как либо
A) Взломайте загрузчик Drupal7 и вытяните весь контент через этот фильтр ниже
B) ob_flush содержимое через фильтр перед загрузкой содержимого
СТОИТ ПРОПИСАТЬСЯ Мы используем Модуль, который называется Доступ к домену, который, я считаю,
привел меня в эту сумасшедшую погоню в первую очередь. Я точно знаю, что это путает
довольно много файлов ...
Проблема, с которой я столкнулся, заключается в том, чтобы выяснить, где именно я могу поймать контент
в? Должна быть возможность выдвинуть поток в переменную, strpos, затем освободить его, правильно? Я думал, что index.php в Drupal7 будет подозреваемым, но я немного
запутался, где и как я должен захватить содержимое. Вот сценарий,
и, надеюсь, кто-то может направить меня в правильном направлении.
//error_reporting(-1);
/* start query */
$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->Load($_SERVER['PHP_SELF']);
$xpath = new DOMXPath($dom);
//if this exists we aren't ready to be read by bots
$query = $xpath->query(".//*[@id='block-views-about-this-site-block']/div/div/div");
//or $query = 'klat-badge'; //if this is a string not DOM
/* end query */
if(strpos($query) !== false) {
//require banlist
require('botlist.php');
$str = strtolower('/'.implode('|', array_unique($list)).'/i');
if(preg_match($str, strtolower($_SERVER['HTTP_USER_AGENT']))) {
//so tell bots we're broken
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
exit;
}
}