Nginxウェブサーバーがあります。
リッチコンテンツサイトを持っていますが、悪意のあるボットがコンテンツをクロールしようとしていることがわかりました。私はこのように私のサイトに来るカールやwgetをブロックしました
if($ http_user_agent〜*(curl | wget)){return 301 $ scheme://www.google.com/; }
しかし、変更した場合、コンテンツにアクセスできることがわかりました - ユーザーエージェント 以下のようなカールリクエストで
curl --user-agent "Googlebot/2.1(+ http://www.google.com/bot.html)" http://example.com/mypage.php OR curl --user-agent "whatever" http://example.com/mypage.php
を使用してcurlまたはwgetから生成されたリクエストをブロックする方法 Nginx 送信された偽のユーザーエージェントに関係なく
ユーザーエージェント
User-Agentは常に偽装できます。チェックできるヘッダーは他にもありますが、より巧妙なボットはそれらも偽装します。 例: Accept、Accept-Language、Connection、およびオブジェクトタイプごとに常に使用されるわけではないその他の一部
Cookies
あまり知能の低いボットはCookieを正しく送受信しないため、Cookieを使用して一部のリソースを保護できます。これには、考慮すべきプライバシーへの影響があるかもしれません。
Javascript
一部のボットはJavaScriptを処理できません。いわば、JavaScriptの「パズル」を非表示にすることができます。これには、ブラウザーが単純なランダム数学問題の答えを計算する必要があります。これを除外する賢い方法を見つけない限り、これは多くのAPI Restful Clientを壊します。
認証
ボットを遠ざけたいリソースがある場合は、それらのリソースを認証で保護する必要があります。
キープアライブ
サイトにアクセスするすべての人がキープアライブをサポートすることが確実な場合。プロキシを含めると、それをサポートしない接続をブロックできます。一部の人はこのオプションを正統でないと思います。
ブラウザやAPIクライアントを制限する可能性がある不明瞭なオプション
ボットの中にはTLS1.2 + SNIを処理しないものがあることも発見しました。ボットはTLS1.2をサポートしていない古いライブラリや、あまり一般的ではないSNIを使用していることが多いためです。これにより、関連する場合、ユーザーがサイトのAPIをヒットする機能が制限されます。
それらのそれぞれをどのようにテストして実装するのか、どれが適切であるのか、適切でないのかを調査するのは、あなたに任せます。 1つのサイズですべてに対応できるわけではありません。
StackOverflow から盗まれた場合、リンクを介してアクセスできないURLをWebサイトに配置できますが、クローラーがそれを見ると、このアドレスをクロールしようとします。これにより、そのクローラーをブロックできます。
<a style="display:none" href="./dontgohere.php">A</a>
IPがリストされたら、何か ngx_http_access_module を使用してアドレスをブロックしたり、fail2banを使用したりできます。先に進むことができるいくつかの異なるソリューションがあります。
ただし、ユーザーエージェント文字列を厳密にブロックしている場合、アレクサンダーが言うようにそれは不可能です。
それは不可能です。 curl
とwget
は任意のユーザーエージェントを置くことができ、誰がサイトをクロールしているかを知ることはできません。