キャプチャなしのphpBB 3のスパム対策保護

phpBB 3のフォーラムの所有者の多くは、フォーラムに付属している標準のキャプチャではあまり節約できないことを既に知っていると思います。



一般に、フォーラムにアクセスすると、キャプチャが有効になっているにもかかわらず、数時間で数百件のスパマーメッセージが追加されており、登録済みの投稿しかできないことがわかりました。 最初は、別のキャプチャを選択しようとしましたが、それも助けにはなりませんでした。 それから私は別のアプローチを考えました。



ユーザーアクションの分析に基づく保護



一般に、フォーラムに最初に追加したのは、GETとPOSTの両方の要求をすべて分析できるようにログファイルに書き込むスクリプトライターでした。



フォーラムはロシア語(ロシア語がデフォルトで有効になっています)であることをすぐに明確にしますが、英語もあります。



したがって、ボットからの典型的な登録要求は次のようになります(メソッド、URL、リファラーが表示され、次にPOST要求からの情報が表示されたため、メールを削除しました)。



GET /forum/index.php /forum/index.php GET /forum/ucp.php?mode=register /forum/ucp.php?mode=register POST /forum/ucp.php?mode=register /forum/ucp.php?mode=register 'agreed' => '    ', 'change_lang' => '', 'creation_time' => '1320421149', 'form_token' => '16d4c035a7de1680c4e19fe0addd242d7edf1822', POST /forum/ucp.php?mode=register /forum/ucp.php?mode=register 'username' => 'Shemtrearve', 'email' => 'deassepleadia@....com', 'email_confirm' => 'deassepleadia@....com', 'new_password' => 'q49uh3oYcN', 'password_confirm' => 'q49uh3oYcN', 'lang' => 'en', 'tz' => '-12', 'agreed' => 'true', 'change_lang' => '0', 'submit' => '', 'creation_time' => '1320421154', 'form_token' => '97471b3af621c1a60f825e50d2b61b3346b48025', GET /forum/ucp.php?mode=login /forum/ucp.php?mode=login
      
      







また、URLからsidを削除しました。ボットは頻繁に追加しますが、私のフォーラムでは無効になっています。 すべての要求は4〜5秒の間隔で行われます。



今、私たちはクエリで奇妙なものを探しています:

  1. 当然、ボットが同じページからページにアクセスしたことがすぐにわかります(リファラーがページに一致します)。
  2. 2番目のPOSTリクエストでは、ボットが英語を選択したという事実に注意を払いますが、前のリクエストでは言語を変更しなかったため、ロシア語でフォーラムのルールを冷静に読んでから英語を選択しました。
  3. さらに、-12タイムゾーンが選択されていることを示しますが、このゾーンは純粋に任意であり、誰もそこに住んでいません。 そして、事はphpBBがこの日付をJavaScriptに設定し、ボットではデフォルトのままであるということです。
  4. 次に、change_lang = 0、phpBBはそのような値を持つことはできませんが、言語コードが必要です。
  5. 最後に、ロシア語で提出し、英語を選択します。 キリル文字を理解できない愚かなボットがまだあり、疑問符がこのフィールドに挿入されます。


一般に、結論は非常に単純ですが、ポイント2〜5に基づいて、ボットの登録を防ぐ小さなスクリプトを作成します。



コードは次のようになります

 if (isset($_POST['password_confirm']) && isset($_POST['tz'])){ //     if( $_POST['tz'] == -12 || //    ($_POST['lang'] == 'en' && $_POST['change_lang'] != 'en') || //   ,  change_lang     ($_POST['lang'] == 'en' && $_POST['submit'] == '') //   ,   -  ){ header("HTTP/1.1 404 Not Found"); exit; } }
      
      







最も簡単な方法は、このコードをconfig.phpの最後に追加することです。そうすることで、長い間探し回ったり、フォーラムの更新時にコードを破壊したりせずに、すぐにボットをフォレストに送信できます。 わかりやすくするためにペイントしただけで、条件を自由に単純化できます。 この単純なコードのおかげで、キャプチャをオフにしたにもかかわらず、ほとんどすべてのスパマーを排除しました。



ボットが時間をかけてこれを回避することを学習することは明らかですが、それから私たちは何か新しいものを思いつきます。



UPD。 サンプルコードを修正しました。それ以外の場合は、いくつかのタイプミスがありました。



All Articles