2

一種のレジストリであるアプリケーションを構築しています。辞書について考えてみてください。単語を検索すると、その単語が見つかった場合に何かが返されます。現在、そのレジストリには企業に関する貴重な情報が保存されており、完全なリストを取得したくなる場合があります。私のアプリケーションは、WSに応答するEJB3.0を使用しています。

そのため、1日あたりIPアドレスごとに最大10個のクエリを許可することを考えていました。毎晩スクリプトによって空になるテーブルにIPアドレスとカウンターを保存します。

そうすることは良い考え/実践ですか?はいの場合、EJB側でIPアドレスを取得するにはどうすればよいですか?データベースからすべてのデータを取得することを防ぐためのより良い方法はありますか?CAPTCHAについても触れましたが、ユーザーにとっては苦痛だと思いますし、実際の人間でも読みにくい場合があります。

私は英語ではないので、それがすべて明確であることを願っています...

ありがとうアラン

4

2 に答える 2

1

IPごとに1日あたり10クエリという制限はあまり良くないと思います。多くの人が同じパブリックIPを共有する可能性があることを考慮に入れてください。

100%正確ではありませんが、短期間に同じIPから異常な量のリクエストが送信されているかどうかを分析できます。アラームが鳴った場合は、CAPTCHAを表示します。

于 2010-05-08T01:43:06.217 に答える
1

別の方法は、セッションスコープに保存するフォームの非表示フィールドに一意のリクエストベースのトークンを配置し、フォームの送信時にそれを比較することです。これにより、セッションを維持しておらず、すでにほとんど存在しているボットが除外されます。

さらに一歩進んで、リクエストベースのトークンにタイムスタンプを追加し、フォームが妥当な時間内に送信されたかどうかを確認できます。たとえば、5秒(少なくとも通常の人間がフォームに入力して送信できる最速の時間)です。これにより、通常は1秒以内にフォームに入力して送信する別のボットが除外されます。これのもう1つの利点は、非常にスマートなボットの場合、後続の多くのリクエストを実行することで、ボットをより簡単にすることを余儀なくされることです。

私は少なくともIPアドレスに依存しません。それはあまりにも多くの外部の妨害要因を伴います。

于 2010-05-08T02:22:51.473 に答える