Блокировка автоматических спам-ботов через htaccess или PHP? - PullRequest
2 голосов
/ 11 августа 2011

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

Как остановить автоматические спам-боты с помощью .htaccess

или я должен вместо этого добавить его в мой PHP файл?

или оставить его полностью?Поскольку спаммеры могут подделать свой пользовательский агент в любом случае?

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

Ответы [ 4 ]

2 голосов
/ 11 августа 2011

Какое снижение производительности произойдет, когда я добавлю это в мой файл .htaccess?

Возможно, если у вас есть тысячи или десятки тысяч строк пользовательских агентов для сравнения. Apache должен проверять это правило при каждом запросе.

или мне вместо этого добавить его в мой файл PHP?

Никакой анализ Apache .htaccess все равно будет выполняться быстрее, чем процесс PHP. Для PHP Apache должен запускать процесс интерпретатора PHP для каждого запроса.

или полностью опустить? Потому что спаммеры все равно могут подделать свой пользовательский агент?

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

Но по каким причинам люди посещают веб-сайт через прокси-сервер, отличный от спама, или когда веб-сайт заблокирован в их стране?

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

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

0 голосов
/ 11 января 2013

Ограничение PHP / блокировка запросов веб-сайтов для пауков / ботов / клиентов и т. Д.

Здесь я написал функцию PHP, которая может блокировать нежелательные запросы для уменьшения трафика вашего веб-сайта.Бог за пауков, ботов и раздражающих клиентов.

КЛИЕНТ / Блокировщик ботов

ДЕМО: http://szczepan.info/9-webdesign/php/1-php-limit-block-website-requests-for-spiders-bots-clients-etc.html

КОД:

/* Function which can Block unwanted Requests
 * @return boolean/array status
 */
function requestBlocker()
{
        /*
        Version 1.0 11 Jan 2013
        Author: Szczepan K
        http://www.szczepan.info
        me[@] szczepan [dot] info
        ###Description###
        A PHP function which can Block unwanted Requests to reduce your Website-Traffic.
        God for Spiders, Bots and annoying Clients.

        */

        $dir = 'requestBlocker/'; ## Create & set directory writeable!!!!

        $rules   = array(
                #You can add multiple Rules in a array like this one here
                #Notice that large "sec definitions" (like 60*60*60) will blow up your client File
                array(
                        //if >5 requests in 5 Seconds then Block client 15 Seconds
                        'requests' => 5, //5 requests
                        'sek' => 5, //5 requests in 5 Seconds
                        'blockTime' => 15 // Block client 15 Seconds
                ),
                array(
                        //if >10 requests in 30 Seconds then Block client 20 Seconds
                        'requests' => 10, //10 requests
                        'sek' => 30, //10 requests in 30 Seconds
                        'blockTime' => 20 // Block client 20 Seconds
                ),
                array(
                        //if >200 requests in 1 Hour then Block client 10 Minutes
                        'requests' => 200, //200 requests
                        'sek' => 60 * 60, //200 requests in 1 Hour
                        'blockTime' => 60 * 10 // Block client 10 Minutes
                )
        );
        $time    = time();
        $blockIt = array();
        $user    = array();

        #Set Unique Name for each Client-File 
        $user[] = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'IP_unknown';
        $user[] = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
        $user[] = strtolower(gethostbyaddr($user[0]));

        # Notice that i use files because bots does not accept Sessions
        $botFile = $dir . substr($user[0], 0, 8) . '_' . substr(md5(join('', $user)), 0, 5) . '.txt';


        if (file_exists($botFile)) {
                $file   = file_get_contents($botFile);
                $client = unserialize($file);

        } else {
                $client                = array();
                $client['time'][$time] = 0;
        }

        # Set/Unset Blocktime for blocked Clients
        if (isset($client['block'])) {
                foreach ($client['block'] as $ruleNr => $timestampPast) {
                        $left = $time - $timestampPast;
                        if (($left) > $rules[$ruleNr]['blockTime']) {
                                unset($client['block'][$ruleNr]);
                                continue;
                        }
                        $blockIt[] = 'Block active for Rule: ' . $ruleNr . ' - unlock in ' . ($left - $rules[$ruleNr]['blockTime']) . ' Sec.';
                }
                if (!empty($blockIt)) {
                        return $blockIt;
                }
        }

        # log/count each access
        if (!isset($client['time'][$time])) {
                $client['time'][$time] = 1;
        } else {
                $client['time'][$time]++;

        }

        #check the Rules for Client
        $min = array(
                0
        );
        foreach ($rules as $ruleNr => $v) {
                $i            = 0;
                $tr           = false;
                $sum[$ruleNr] = '';
                $requests     = $v['requests'];
                $sek          = $v['sek'];
                foreach ($client['time'] as $timestampPast => $count) {
                        if (($time - $timestampPast) < $sek) {
                                $sum[$ruleNr] += $count;
                                if ($tr == false) {
                                        #register non-use Timestamps for File 
                                        $min[] = $i;
                                        unset($min[0]);
                                        $tr = true;
                                }
                        }
                        $i++;
                }

                if ($sum[$ruleNr] > $requests) {
                        $blockIt[]                = 'Limit : ' . $ruleNr . '=' . $requests . ' requests in ' . $sek . ' seconds!';
                        $client['block'][$ruleNr] = $time;
                }
        }
        $min = min($min) - 1;
        #drop non-use Timestamps in File 
        foreach ($client['time'] as $k => $v) {
                if (!($min <= $i)) {
                        unset($client['time'][$k]);
                }
        }
        $file = file_put_contents($botFile, serialize($client));


        return $blockIt;

}


if ($t = requestBlocker()) {
        echo 'dont pass here!';
        print_R($t);
} else {
        echo "go on!";
}
0 голосов
/ 07 сентября 2012

... что не так с настройкой доменной точки com / bottrap, запретить доступ к ней через robots.txt, перехватить непослушного бота, поместить его IP в массив .txt, навсегда запретив ему доступ с заголовком 403?

0 голосов
/ 11 августа 2011

Лично я бы больше сосредоточился на защите основ, таких как формы, коды, открытые порты и т. Д., По сравнению с блокировкой. Визит в любом случае имеет значение! ;)

...