0

まず、スパム対策の概念について説明します。2 か月前、父の会社の Web サイトで問題に直面しました。連絡フォームがありますが、ロシアのボットがサーバーのメールボックスに頻繁にスパムを送信し始めました (1 日に 3 ~ 5 件のメッセージ)。キャプチャを改善しました (より複雑なフォント、別の背景など) が、それは恒久的な解決策ではないようです。ボットは思ったより少し賢かった。私はさまざまなスパム対策の概念を読み始め、「ハニーポット法」を見つけました。しばらくは機能しましたが、ボットは実装後最初の 1 週間でフィールドの名前を学習しました。今では、毎朝 PHP ファイルを開いて、隠しフィールドの新しい名前を考えなければなりません。

わかった。質問に。そのフィールドのランダムな名前を生成する必要がありますが、それを行う方法の概念が必要です。現在、次の処理を行う PHP スクリプトを使用しています。

1: MySQL DB に記録された、10 分以上経過したすべてのセッションを削除します。

2: 現在のユーザーにセッションが設定されているかどうかを確認します。

3: セッションが設定されてから 10 分以内の場合、セッションを更新し、現在の出力をtime()データベースに書き込みます。

4: そうでない場合 - 新しいセッションを開始し、それsession_id()を MySQL に記録します。

MySQL テーブルに 4 つの列があります: id(PRIMARY KEY、レコードの ID); sess_id(出力を入れてsession_id()、ユーザーのセッションを管理するために使用する場所); session_started (の出力を含むtime()); tf_name (ランダムに生成された文字列を含み、後でハニーポット フィールドの名前属性として使用する必要があります)。

一般に、この概念は機能します。ただし、ユーザーは、ページが読み込まれてから 10 分以内にメッセージを送信するように制限されています。時間要素を排除する必要があります。

私の意見では、解決策の 1 つは、サイトの読み込み時に新しい PHP セッションを生成しsession_destroy()、ユーザーが Web サイトを離れたとき (ブラウザーを閉じる、外部リンクをクリックするなど) に新しい PHP セッションを生成することです。しかし、これを実装するのは難しいようです。 JavaScript を使用したくない (したがって、onunload イベントを使用できない) という事実と、外部リンクまたは内部リンクをクリックしても (または、ハニーポット フィールドの新しい名前が生成されます)。

4

1 に答える 1

1

csrf、またはクロスサイト リクエスト フォージェリとして知られている概念を確認してください。私の意見では、これは独自のソリューションよりもはるかに実用的なソリューションになると思います。

参照: https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

経験: https://github.com/smiegles/PHP-csrf-security-classes

あなたはすでにキャプチャを使用していますが、ボットはそれを回避できます。より良いキャプチャを使用してください:)。私が個人的に幸運だった 2 つのキャプチャは、簡単な数学(3+4)の答えまたはI am not a robotチェックボックスを必要とするものです。

参照: https://www.google.com/recaptcha/intro/index.html

参照: https://github.com/nettraction/Math_Captcha

于 2016-03-03T15:49:40.017 に答える