2

これを.htaccessファイルに追加すると、パフォーマンスが低下します。

.htaccessを使用して自動スパムボットを停止する方法

または、代わりにPHPファイルに追加する必要がありますか?

またはそれを完全に除外しますか?スパマーはとにかくユーザーエージェントを偽造する可能性があるので?

ユーザーがプロキシサーバーを介してWebサイトにアクセスできないようにすることも意味がありますか?これにより、悪意を持ってここに来なかった人々があなたのWebサイトにアクセスできなくなる可能性があることも知っています。しかし、スパム以外のプロキシサーバーを介してWebサイトにアクセスする理由や、自国でWebサイトがブロックされている理由は何ですか?

4

4 に答える 4

2

これを.htaccessファイルに追加すると、パフォーマンスにどのような影響がありますか?

おそらく、照合するユーザーエージェント文字列が数千または数万ある場合。Apacheは、すべてのリクエストでこのルールをチェックする必要があります。

または、代わりにPHPファイルに追加する必要がありますか?

Apacheによる.htaccessの解析は、PHPプロセスよりも高速です。PHPの場合、Apacheはすべてのリクエストに対してPHPインタープリタープロセスを開始する必要があります。

またはそれを完全に除外しますか?スパマーはとにかくユーザーエージェントを偽造する可能性があるので?

おそらくそうだ。ほとんどの悪意のあるスパムボットが標準のユーザーエージェントを偽造している可能性が非常に高いです。

しかし、スパム以外のプロキシサーバーを介してWebサイトにアクセスする理由や、自国でWebサイトがブロックされている理由は何ですか?

プロキシサーバーには多くの正当な用途があります。1つは、モバイルトラフィックを節約するために、ある種のプリフェッチを使用するモバイルクライアントです。クライアントにプロキシサーバーの使用を強制するISPもあります。私の意見では、プロキシサーバーを使用するユーザーをロックアウトすることは賢明な方法ではありません。

肝心なのは、悪意のある活動のために大量のトラフィックが無駄になっている場合を除いて、これらのことを心配する価値はないということです。

于 2011-08-11T19:35:20.463 に答える
0

スパイダー/ボット/クライアントなどのPHP制限/ブロックWebサイト要求。

ここで私はあなたのウェブサイトのトラフィックを減らすために不要なリクエストをブロックすることができる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!";
}
于 2013-01-11T11:40:51.370 に答える
0

私は個人的に、ブロックするよりも、Webサイトのフォーム、コード、開いているポートなどの基本を保護することに重点を置いています。とにかく訪問は重要です!;)

于 2011-08-11T19:38:33.023 に答える
0

...ドメインドットcom/bottrapの設定、robots.txtを介したアクセスの禁止、いたずらボットのキャプチャ、IPを.txt配列に入れ、403ヘッダーでのアクセスを永久に拒否することの何が問題になっていますか?

于 2012-09-06T22:27:59.913 に答える