2017-12-24 19 views
2

洪水の制限があるユーザーに迷惑をかけず、自動検索を行っているボットをブロックするベストプラクティスは何ですか?何が起こっているかサイト内検索を使用していて、あまりにも多くのリクエストでSQLをオーバーフローさせたボットを扱うにはどうすればよいですか?

私は奇妙な検索動作をより意識していると私は最終的にそれが誰であるかをキャッチするために、時間を過ごしました。それは157.55.39です。* Bingとも呼ばれます。これは奇妙です。なぜなら、_GET ['q']が検出されると、noindexが追加されるからです。

問題がされており、入ってくるリクエストのあまりにも多くの事例があるとして、彼らは、SQLサーバーを遅くしていることを

私がこれまで行っているもの:。

を私が検索を実装しています洪水の限界。しかし、私はセッションクッキーでそれを行い、最後の検索タイムスタンプからチェックして計算しています。なぜなら、ビンは明らかにクッキーを無視し続けているからです。

reCAPTHAを追加するのが最悪のシナリオですが、私は "あなたは人間ですか?"あなたが検索するたびにティックボックス。洪水が検出されたときにのみ表示されます。だから、基本的には、本当の問題は、要求を停止するためにreCAPTCHAののいくつかの並べ替えをトリガするために、クライアントからあまりにも多くの要求を検出する方法、..です

EDIT#1:


私は、現在の状況を取り扱います
<? 

# Get end IP 
define('CLIENT_IP', (filter_var(@$_SERVER['HTTP_X_FORWARDED_IP'], FILTER_VALIDATE_IP) ? @$_SERVER['HTTP_X_FORWARDED_IP'] : (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP) ? @$_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']))); 

# Detect BING: 
if (substr(CLIENT_IP, 0, strrpos(CLIENT_IP, '.')) == '157.55.39') { 

    # Tell them not right now: 
    Header('HTTP/1.1 503 Service Temporarily Unavailable'); 

    # ..and block the request 
    die(); 
} 

これは機能します。しかし、それはより体系的な問題への一時的な解決策のようです。

Bingが/search.htmlをインデックスに登録するなどの検索エンジンは、まだ実際には検索しないようにしたいと思います。 "最新の検索"やそれに類するものはないので、どこから問い合わせを受けているのかは分からない。

EDIT#2 - 将来的には他の誰かがこれらの問題を持っている場合、私はそれ
を解く方法を、私はこのことができます願っています。

まず、BingにはGoogleと同じURLパラメータ機能があることがわかります。だから私はBingにURLパラメータ "q"を無視するよう指示することができました。正しい答えに基づいて

が、私はrobots.txtのにパラメータqのための不許可の行を追加しました:

Disallow: /*?q=* 
Disallow: /*?*q=* 

私はまた、ピーク時のトラフィック上で私たちを気にしないために、Bingのウェブマスターコンソールの内側に語りました。

全体として、これはすぐにサーバーリソース使用量からの肯定的なフィードバックを示しました。しかし、私は、同一のクエリ、特に_GETが関係している場合の全体的なフラッド制限を実装します。したがって、BingがAJAXコールを訪問することを決める場合(例:?action = upvote & postid = 1)。

+0

また、私は157.55.39。*を検出してブロックするとしたら、最も適切な応答は何ですか? HTTP 503または400? –

+0

まともなスクレイパーに検索パスを奪わないように指示するrobots.txtはありませんか? – rene

+0

洪水の制限データをクッキーに保存しようとしましたか?クソそれは非常にばかげた解決です、彼らは決してクッキーを保存/使用しません。非常に簡単な解決策は、MemCachedを使用してそのようなデータを格納することですが、プロジェクトのサイズ(負荷)に大きく依存します。 p.s.また、robots.txt経由で検索エンジンのルールを変更することもできます –

答えて

1

スパムは、すべてのウェブサイトの所有者が対処するのに苦労する問題です。
非常に簡単な方法から始まり、非常に難しくて強力な保護メカニズムを使用して、良い保護を構築する方法はたくさんあります。

あなたのために今私は簡単な解決策を見ています。
robots.txtを使用し、Bingスパイダーが検索ページをクロールできないようにします。
これは、very easyです。

あなたのrobots.txtファイルは次のようになります。

User-agent: bingbot 
Disallow: /search.html?q= 

しかし、これは完全にあなたの検索結果をクロール検索エンジンのスパイダーをブロックします。
あなただけのような要求を制限したいのですが、完全にそれらをブロックしていない場合は、これを試してみてください。

User-agent: bingbot 
crawl-delay: 10 

これは10秒ごとにあなたのウェブサイトのページをクロールしビングを強制します。
しかし、このような遅延では、1日に8,640ページしかクロールされません(これは、1日あたりのリクエストが非常に少ない)。
これでうまくいくなら、大丈夫です。

しかし、は、サーバー自体によってこの動作を手動で制御し、Webクローラだけでなくハッカーからも検索フォームを保護したい場合はどうすればよいですか?
彼らは簡単に/時に50,000リクエスト以上あなたのサーバーに送信することができます。

この場合、2つのソリューションをお勧めします。
最初にに接続し、CloudFlareをあなたのウェブサイトに接続してください。ViewDNS IP Historyのようなサービスでサーバの実IPがまだ利用可能かどうかを忘れないでください。
アクティブなサーバーIPが履歴に表示されている場合は、変更することを検討することをお勧めします(強くお勧めします)。

第二にを使用すると、MemCachedを使用して、フラッドデータを保存し、特定のIPでクエリが多すぎる(つまり30 q /分)かどうかを検出できます。
もしそうなら、しばらくの間、(MemCachedを介して)performを使用する機会をブロックします。

もちろん、これはあなたが使用できる最適な解決策ではありませんが、それはうまくいくでしょうし、あなたのサーバーにはあまりお金がかかりません。

+0

ありがとう、全体的にこれは私の問題を解決します。私は、bingがgoogleと同じURLパラメータを無視しているように見えることを付け加えたいと思います。これにより、 "q"を追加して無視することができます。しかし、Disallow:/search.html?q=私は知らなかったが、これは完全に私を助けます。 –

+0

喜んでお手伝いします。解決策があれば回答を受け入れてください。 –

+0

私はこれを少し修正しました: 'Disallow:/ *?q = * Disallow:/ *?* q = *'これは、可能なすべてのqパラメータをブロックします。 –

関連する問題