[解決済み] スクリプターによるウェブサイト叩きを阻止する
質問
<ブロッククオート回答は受けましたが、悲しいかな、当初の最悪のシナリオから抜け出せないと思います。 購入時に全員CAPTCHAを実施すること . 簡単に説明すると、キャッシュ/ウェブファームによってヒット数の追跡が不可能になり、回避策(キャッシュされないウェブビーコンの送信、統一テーブルへの書き込みなど)はボットが行うよりもサイトの速度が低下してしまうのです。Ciscoなどから高価なハードウェアが提供されており、高いレベルでの支援が可能なようですが、すべての人にCAPTCHAを行うことが代替案であるならば、その費用を正当化するのは難しいでしょう。後でもっと詳しい説明を試みますし、将来の検索者のためにこれをきれいにします(コミュニティWikiなので、他の人が試すのも歓迎ですが)。
シチュエーション
woot.comのバッグオクラップセールについてです。私はWoot WorkshopというWootの子会社で、デザイン、商品説明の執筆、ポッドキャスト、ブログ投稿、フォーラムのモデレーターをしている会社の社長をしています。私はCSS/HTMLを扱い、他の技術にはほとんど精通していません。私は開発者と密接に仕事をしており、ここにあるすべての回答(そして私たちが持っている他の多くのアイデア)について話し合ったことがあります。
ユーザビリティは私の仕事の大部分を占め、サイトをエキサイティングで楽しいものにすることが残りの大部分を占めます。そこで、以下の3つの目標が導き出されました。CAPTCHAはユーザビリティを損ないますし、ボットは私たちのガラクタ販売から楽しさと興奮を奪ってしまいます。
ボットは毎秒何十回となくトップページにアクセスし、ランダムセールのために画面をスクラップしています。それを見た瞬間に、ログインして「欲しい」をクリックし、フォームに記入して、ガラクタを買うというプログラムの第二段階が始まるのです。
評価
<ブロッククオートlc : stackoverflowや他のサイトでこの方法が使われているのは、ほとんどの場合、認証された(ログインした)ユーザーを相手にしているからです。
Wootでは、匿名(非ログイン)のユーザーでもトップページを見ることができます。つまり、スラムのボットは非認証(IPアドレス以外では基本的に追跡不可能)である可能性があるのです。
このIPスキャンは、a) クラウドネットワーキングとスパムボットゾンビの時代にはかなり無意味で、b) 1つのIPアドレスから来るビジネスの数を考えると、あまりにも多くの無実の人を捕まえすぎる(言うまでもなく、非固定IP ISPの問題やこれを追跡しようとするとパフォーマンスが低下する可能性があります)。
あ、あと、電話をかけてもらうのは最悪のシナリオですね。電話してもらってもいいですか?
<ブロッククオートブラッドC : Ned Batchelderの方法はかなりクールに見えますが、かなりしっかりとサイトのネットワーク用に作られたボットを打ち負かすように設計されています。私たちの問題は、ボットが私たちのサイトを破るために特別に作られていることです。これらの方法のいくつかは、スクリプターがボットを進化させて、ハニーポットを無視し、フォームIDの代わりに近くのラベル名をスクリーンスクレイピングし、javascript対応のブラウザコントロールを使用するまで、短期間なら有効かもしれない。
<ブロッククオート
lc again もちろん、誇大広告がマーケティング・スキームの一部でない限り、そうです。いつその商品が現れるかという驚きと、手に入れることができたときの興奮は、おそらく実際に手に入れることになるガラクタと同等かそれ以上に重要なものでしょう。先着順を排除するようなことは、ガラクタを「獲得」するスリルを損なうことになります。
<ブロッククオート
ノバトラスト : そして私は、新しいボットの支配者を歓迎します。実際、サードパーティーのアプリが製品情報をスキャンできるようにRSSフィードを提供していますが、メインサイトのHTMLより先にスキャンすることはありません。もし私の解釈が正しければ、あなたのソリューションは、ゴール1を完全に犠牲にすることで、ゴール2(パフォーマンスの問題)を助け、ボットがほとんどのゴミを買うという事実を諦めているのです。最後の段落の悲観論が私には正確に感じられるので、あなたの回答に上票を投じました。ここには銀の弾丸はないようです。
残りの回答は概してIP追跡に頼っていますが、これもまた、(ボットネット/ゾンビ/クラウドネットワーキングでは)役に立たず、(同じIPアドレスから来る多くの無実の人を捕まえる)有害なようです。
他のアプローチやアイデアはありますか?私の開発者は、「CAPTCHAを使おう」と言い続けていますが、私たちの製品を欲しがっている実際の人間に対して、より侵入的でない方法があることを期待しています。
オリジナルの質問
非常に高い知覚価値を持つものを安く売っていて、数量が非常に限られているとします。この商品がいつ売れるかは誰も正確にはわかりません。そして、100万人以上の人々が、あなたが売っているものを見るために定期的に訪れています。
スクリプターやボットは、プログラムによって[a]いつその商品が売られるかを把握し、[b]自分がその商品を最初に買うようにしようとすることになるのです。これは2つの理由で最悪です。
- あなたのサイトが人間以外の人に荒らされ、すべての人が遅くなる。
- スクリプターが製品を「勝ち」にしてしまい、常連客が騙されたと感じるようになる。
一見明白な解決策は、ユーザーが注文する前に何らかの輪を作ることですが、これには少なくとも3つの問題があります。
- CAPTCHAを解読したり、猫を選んだり、数学の問題を解いたりしなければならないので、人間にとってユーザー体験は最悪です。
- 知覚された利益が十分に高く、群衆が十分に大きい場合、あるグループはどんな調整でも回避する方法を見つけ、軍拡競争につながる。(これは、調整が単純であればあるほど、特に当てはまります。隠し「コメント」フォーム、フォーム要素の再配置、誤ったラベル付け、隠し「ゲットチャ」テキストはすべて、一度は機能しますが、その後、この特定のフォームをターゲットに戦うために変更する必要があります)。
- たとえスクリプターがあなたの調整を「解決」できなかったとしても、あなたのフロントページを叩いて、スクリプターが手動で注文を記入するためのアラームを鳴らすことを防ぐことはできません。彼らは[a]を解決することで優位に立ち、[b]では注文ページに最初に到達した人間になるため、おそらくまだ勝つでしょう。さらに、1.はまだ起こっており、サーバーエラーと全員のパフォーマンスの低下を引き起こします。
もう一つの解決策は、あまりに頻繁にヒットするIPを監視し、ファイアウォールでブロックするなどして、注文できないようにすることです。これは2.を解決し、[b]を防ぐことができますが、IPのスキャンによるパフォーマンスのヒットは膨大で、スクリプターが独自に起こしていた問題よりも1.のような問題を引き起こす可能性が高いです。さらに、クラウドネットワーキングとスパムボットのゾンビの可能性があるため、IPチェックはかなり無意味です。
3つ目のアイデアとして、注文フォームの読み込みを一定時間(例えば半秒)強制することで、スピード注文の進行が遅くなる可能性がありますが、やはりスクリプターは実際のユーザーに害のない速度で、最初の人になることができます。
目標
- スクリプトを書かない人間に商品を売る。
- ボットによって遅くならない速度でサイトを運営し続けること。
- 普通の」ユーザーには、人間であることを証明するためのタスクをわずらわせないこと。
解決方法は?
SOがCAPTCHAでやっているようなことを実装してはどうでしょうか。
普通に使っていれば、おそらく一度も目にすることはないでしょう。たまたま同じページを頻繁にリロードしたり、連続したコメントを早く投稿したり、何かアラームが鳴るようなことがあれば、人間であることを証明させればいい。あなたの場合、同じページを何度もリロードする、ページ上のすべてのリンクを素早くたどる、注文フォームに人間とは思えないほど速く入力する、などがこれにあたると思われます。
x回連続でチェックに失敗したら(例えば2回とか3回とか)、そのIPにタイムアウトを与えるなどの措置をとる。そして、タイムアウトが終わったら、もう一度チェックに戻すように捨てる。
未登録のユーザーがアクセスしているのですから、IPしかありません。必要であれば、各ブラウザにセッションを発行し、そのように追跡することもできます。もちろん、あまりに多くのセッションが連続して(再)作成されている場合(ボットがクッキーを削除し続ける場合)には、ヒューマンチェックをかけるようにします。
多くの無実の人を捕まえることに関しては、ヒューマンチェックのページに免責事項を掲載することができます: "多くの匿名ユーザーが同じ場所から私たちのサイトを閲覧している場合、このページも表示されることがあります。これを避けるため、登録またはログインすることをお勧めします(文言は適切に調整してください)。
それに、1つのIPからX人が同時に同じページ(複数可)を読み込んでいる確率はどれくらいでしょうか?もし確率が高ければ、ボットアラームのトリガーを別のものにする必要があるかもしれません。
編集部:もう一つの方法として、もし彼らが何度も失敗していて、商品の需要に自信があるなら、彼らをブロックして、ブロックを解除するために個人的にCALLさせることもできます。
電話させるというのは、一見馬鹿馬鹿しい方策に見えますが、それは コンピュータの背後に人間がいることを確認することができます。 . 重要なのは、ボットでない限りほとんど起こらないはずの条件(例えば、連続して何度もチェックに失敗する)でのみブロックを行うようにすることです。そうすれば、電話に出るという人間同士のやり取りが強制されます。
電話をしてもらうというコメントに対して、ここには明らかにそのトレードオフがあります。販売開始時に数回の電話を受け入れるほど、ユーザーの人間性を確保することを心配しているのでしょうか?もし私が、製品が人間のユーザーに届くことをそれほど心配しているならば、おそらくその過程で自分の時間を(ほんの少し)犠牲にしながら、この決断をしなければならないでしょう。
ボットを優位に立たせない/サイトを叩かせないという決意があるようなので、電話という選択肢もありだと思います。私はあなたの製品で利益を得ていないので、このような電話を受けることに興味はありません。しかし、あなたがその利益の一部を共有するのであれば、私は興味を持つかもしれません。これはあなたの製品なので、あなたがどの程度気にするか決めて、それに従って実行する必要があります。
タイムアウト(ただし、その後またサイトを叩かれる、繰り返し)、長いタイムアウト(本当に商品を買おうとした人間なら、チェックに失敗してSOLと罰を受ける)、メール(ボットに簡単にやられる)、ファックス(同じ)、カタツムリ郵便(時間がかかりすぎる)など、他のブロック解除方法はあまり効果がないのです。
もちろん、その代わりにタイムアウトが発生するたびに、IPごとにタイムアウト時間を長くすることもできます。ただ、真の人間を不用意に罰することがないように注意してください。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン