2009-07-09 10 views
1

私は自分の会社の連絡フォームを作成しており、できるだけ迷惑メール防止にしたいと考えています。私はハニーポット+セッションチェックを作成しましたが、x分ごとにフォームを送信することだけが可能になります。言い換えれば、フォームをx時間使用しないようにIPを禁止します。PHP一時的にIPを禁止する

これを実行する最適なソリューションは何ですか?

私はいくつか考えることができますが、どれも理想的ではありません。

答えて

5

タイムスタンプと共にフォームが送信されるたびに、ユーザーIPをデータベースに格納します。ユーザーがフォームを送信すると、最初にデータベースをチェックして、タイムフレーム内に提出したかどうかを確認します。

ユーザーが同じIPでも構わない大規模なネットワークでは、いくつかの問題が発生する可能性があります。それは本当にターゲットオーディエンスに依存します。

2

データベース。そこにIPを格納し、タイムスタンプを付けます。

0

私はいくつかのブログで使用されているのを見てきましたが、ボットからの保護のためにJavaScriptを使用するのが良い方法です。 onsubmit()イベントと同様に、フォームのメソッドをGETからPOSTに変更します。あなたは他の魔法もやることができます。ボットはJavaScriptを実行するのには非常に不慣れなので、あなたはそれをあなたの利点に使うことができます。

一方、JavaScriptを有効にしていないユーザーの0.0000001%が傷つく可能性があります。まあ、あなたの選択は本当です。 :)あなたは(私は仮定ボット別名いくつかの「ブラウザ」を排除する)クッキー対応ブラウザにフォームを制限する気にしない場合は

+1

ねじれた人、素敵な先端。 – zuk1

+0

ここで0.0000001%= 6%http://www.thecounter.com/stats/2009/July/javas.php –

+0

私のサイトのショッピングカートはJSを持たない人でも働きません。 – zuk1

0

すると、あなたはこのような何か行うことができます:

フォームページがロードを、それがためにチェックしますタイムスタンプを持つセッション変数。何も見つからない場合は、ページが作成され、同じページにリダイレクトされますが、「action = start」などのGETパラメータが指定されています。したがって、2番目のロードで、$ _GET ['action'] == 'start'が表示されている場合は、そのセッション変数を確認できます。 Cookieが見つからない場合は、Cookieが必要であることを他の場所にリダイレクトすることができます。

タイムスタンプをチェックして、それが間に合わなかった場合は別の操作を行うことができます。

この方法では、少なくとも同じIPが許可されます。ファイアウォールの背後にある大規模なグループを扱う場合、グループ全体をブロックする必要はないからです。

0

おそらくデータベースのことは、何も許可する必要がないため、データを記録するだけなので、おそらく最も良い方法でしょう。その唯一の問題は、IPを隠蔽したり、複数の場所から攻撃を受ける可能性があることです。私は彼らのセッション/クッキーのIPをデータベースと相互参照しようとします。同じ人が同じIPアドレスからあなたのサイトを本当に速く叩いているなら、それは明らかですが、ユーザーIDも作成すれば、IPアドレスをすばやく切り替えることができます。

0

また、何らかの種類のcronスクリプト(または少なくともツールを書いて待機しています)を手に入れることができます。私のサイトでは、非常に小さな時間枠(10秒以内)内に複数のipsから正確に同一の投稿を表示するよう書いています。

質問フォームに疑問のある投稿を表示するために、少なくともクエリを書くことができます。

関連する問題