ここ数日、ボットが使用する Web フォームを保護する方法についてよく考えていました。使い方は乱用で、約 80 万件のボットのクエリが 8 時間以内に処理されます。
状況の概要を簡単に説明しましょう。不足している情報があればお尋ねください。
ボット:
- ボットには異なる IP があります。
- ボットは、ユーザー エージェントを実際に存在するものに変更します。
- ボットが js をロードして Cookie を持っているかどうかは不明な点です。
問題点:
- 外部リソースから送信される可能性があるため、フォームは非表示のトークン フィールドを使用できませんでした。CSRF トークンを認識せず、トークンを生成できないさまざまな Web サイトなどのリソース。CSRFが使えなくなる。
- Web サイトはブラウザにキャッシュする必要があり、疑わしい動作などの例外的な状況でのみキャッシュがリセットされる場合があります。
- データベースを集中的に使用することはできません (!)。
現在の様子:
- 有効期限が何かにハッシュされた Cookie カウンター + 追加の文字は、システムだけがいつ挿入したかを認識します。
- ブラウザが Cookie を処理できなかった場合は、データベース ログが使用されました。ユーザーがサーバーに到達しない場合、ブラウザーのキャッシュに問題があります。結果: 検証が実行されておらず、カウンターがインクリメントされていません。
- X 回の試行制限を超えたユーザーに reCaptcha が適用されました。
思いついたアイデア:
- いくつかのコンテンツを含む iframe を提供し、0 を期限切れにします。iframe は単純な Cookie ロジックを作成します。
- Iframe : cookie が設定されていない場合 - 設定し、cookie が設定されている場合は確認します。ユーザーが制限を超えていない場合-カウンター+1を設定し、超えた場合-特定のページに送信すると、キャッシュがリセットされて警告が表示されます。
ここでの難点は、ボットが Cookie をサポートしておらず、コンテンツがキャッシュから提供されている場合はどうなるかということです...ユーザーがサーバーに到達しないため、データベースは何も書き込みません。ただし、ユーザーがキーワードを変更すると、キャッシュがリセットされ、背後のロジックが機能します。
2 番目の問題: ボットが JS をサポートしていない場合 (キーワードを切り替えると、ボットは除外されます)。ただし、コンテンツがキャッシュから提供されている間はリダイレクトできません。
3 つ目の難点: ボットが ReCAPTCHA を解読したら?:)
*質問: *
この状況であなたは何をしていましたか?あなたが考えている手順を説明してください。物事に対するあなたの視点に本当に感謝します。すべてのアイデアは他のアイデアで洗練される可能性があり、優れた保護スキームを考え出すことができます! 君たちありがとう!