コメントのスパムをブロックするためのキャプチャ以外の方法にはどのようなものがありますか?
18 に答える
私の経験では、現在最も効果的な方法は、CSS を介してユーザーに見えないようにするハニーポットの入力フィールドです (visibility:hidden、サイズを 0 ピクセルに設定する、ブラウザー ウィンドウのはるか外側に絶対位置を設定するなど、いくつかの異なる方法を使用するのが最適です)。とにかくいっぱいになっている場合は、スパムボットであると見なすことができます。
このブログでは、私が自分で試したかなり複雑な方法について説明しています (これまでのところ 100% 成功しています) が、ハッシュ化されたフィールド名をすべてスキップして、いくつかの単純なハニーポット フィールドを追加するだけで同じ結果が得られるのではないかと思います。
1)セッション関連の情報をフォームに追加する例:
<input type="hidden" name="sh" value="<?php echo dechex(crc32(session_id())); ?>" />
その後、ポストバック時に、セッションが有効かどうかを確認します。
2) Javascript のみ。提出時に Javascript インジェクションを使用します。例:
<input type="hidden" id="txtKey" name="key" value="" />
<input type="submit" value="Go" onclick="document.getElementById('txtKey').value = '<?php echo dechex(crc32(session_id())) ?>';" />
3) IP、ユーザー、またはセッションごとの制限時間。これは非常に簡単です。
4) フィールド名のランダム化:
<?php
$fieldkey = dechex(crc32(mt_rand().dechex(crc32(time()))));
$_SESSION['fieldkey'] = $fieldkey;
?>
<input type="text" name="name<?php echo $fieldkey; ?>" value="" />
<input type="text" name="address<?php echo $fieldkey; ?>" value="" />
その後、サーバー側で確認できます。
Akismet には API があります。誰かがそれ用のラッパー クラス (BSD ライセンス) を書きました: http://cesars.users.phpclasses.org/browse/package/4401.html
ベイジアン フィルター クラスもあります (BSD Liscense も) http://cesars.users.phpclasses.org/browse/package/4236.html
これは、キャプチャを使用せずにスパム ボットやブルート フォース攻撃をブロックする簡単なトリックです。
これをフォームに入れます:
<input type="hidden" name="hash" value="<?php echo md5($secret_key.time()).','.time(); ?>" />
これをphpコードに入れます
$human_typing_time = 5;/** page load (1s) + submit (1s) + typing time (3s) */
$vars = explode(',', $_POST['hash']);
if(md5($secret_key.$vars[1]) != $vars[0] || time() < $var[1] + $human_typing_time){
//bot?
exit();
}
フォームの重みに応じて、$human_typing_time を増減できます。
もちろん、ナイーブ ベイジアン フィルター:
http://blog.liip.ch/archive/2005/03/30/php-naive-bayesian-filter.html
ハニーポット理論もあります。ハニー ポットを他の形式のスパム リダクションと組み合わせると、最良の結果が得られます。
もう 1 つの一般的な方法は、ユーザーに簡単な質問をすることです (「火は熱いですか、それとも冷たいですか?」「2 足す 7 は何ですか?」など)。少しキャプチャに似ていますが、スクリーン リーダーを使用して、視覚障害のあるユーザーがよりアクセスしやすくなっています。WordPress ブログで頻繁に目にするので、これを行う WordPress プラグインが必要だと思います。
スブラム!Akismet に似たオープンソースのフィルターです。
単純なベイジアン フィルタリングを使用し、複数の分散ブラックリストで送信者の IP とリンクをチェックし、HTTP 要求の正確性をチェックし、JS の存在をヒントとして使用します (必須ではありません)。
多くの人がすでに提案しているように、ハニーポット入力フィールドを使用してください。しかし、あなたがしなければならないことが他に2つあります。まず、入力フィールドがハニーポットである名前/IDをランダム化します。セッション内の有用なフィールドの状態を保存します (および CSRF 攻撃に対して使用されるフォーム トークン)。たとえば、取得するフィールドは次のとおりです: 名前、電子メール、メッセージ。フォームには、トークンである "token"、このフォームの名前である "jzefkl46"、電子メールの "ofdizhae"、メッセージの "45sd4s2"、ハニー ポットの "fgdfg5qsd4" があります。ユーザーセッションでは、次のようなものを持つことができます
array("forms" => array("your-token-value" => array("jzefkl46" => "name", "ofdizhae" => "メール", "45sd4s2" => "メッセージ", "fgdfg5qsd4" => ハニー"));
フォーム データを取得したら、再度関連付ける必要があります。
次に、ロボットはハニー ポット フィールドを回避するチャンスが多いため (25% の確率)、ポットの数を増やします。それらを 10 個または 20 個使用すると、HTML のオーバーヘッドが大きくなりすぎずに、ボットに難易度が追加されます。
通常の CAPTCHA は現在、スパムボットで解決可能です。
代わりに「テキスト CAPTCHA」を検討してください: 「1 + 1 は何ですか?」のような論理的または一般的な知識の質問です。または「カスタード将軍の白い馬は何色ですか?」質問は静的にすることもできます (すべての試行で同じ質問)。
(Taken from http://matthewhutchinson.net/2010/4/21/actsastextcaptcha )
ジェフ・アトウッドもブログでこのような検証を使用していると思います。(間違っていたら訂正してください)
いくつかのリソース:
- テキスト キャプチャ サイトとサービス : http://textcaptcha.com/demo
- プラグイン : http://matthewhutchinson.net/2010/4/21/actsastextcaptcha
- 動作しないコードを含むテキスト キャプチャの詳細: http://www.thesamet.com/blog/2006/12/21/fighting-spam-on-phpbb-forums/
次のような単純な数学的な質問によって、私の Web サイトのスパムを約 99% 削減しました。
2+4とは【テキストボックス】
「6」と答えると、ユーザーは質問/コメントを送信できます。
私にはうまくいき、同様のソリューションはコーディングホラーのジェフアトウッドにも機能します!
リンクを禁止します。リンクがなければ、スパムは役に立ちません。
[編集] 中間の方法として、「良い」サイト (通常は自分のサイト) へのリンクのみを許可します。それらはほんの一握りしかないため、ユーザーのリクエストに応じて追加するか、リンクを確認するまでコメントを保留することができます. よくなったら、追加します。
しばらくすると、これをオフにして、リンク付きのコメントを自動的に拒否し、ユーザーが文句を言うのを待つことができます。
ほとんどのボットは、フォーム全体に入力して送信するだけです。機能する簡単なトリックは、通常は JavaScript を使用して非表示にする通常のフィールドを作成することです。サーバー側では、このフィールドが入力されているかどうかを確認してください。もしそうなら、それは確かにスパムです。
Akismet は優れた代替手段です。投稿のスパムをチェックし、非常に効率的に機能します。ライブラリをロードするだけです。 http://akismet.com/development/
例とアイデアについては、いくつかの wp スパム対策プラグインをチェックしてください
キャプチャを使用しない優れたスパム対策がたくさんあります。
私がお勧めするもの: hashcash、nospamnx、typepad antispam。これらはすべて、スパムをブロックするさまざまな方法を使用しており、私はそれらすべてを使用しています。hashcash+nospamnx は、ほぼすべてのスパムボットをブロックします。およびタイプパッド アンチスパムは、人間が入力したほとんどのスパムをブロックします。
これらも良いものです: spambam、wp-spamfree、anti-captcha、bad-behavior、httpbl など
また、自分のサイトから来ていないボットの直接の POST をブロックする単純な .htaccess も使用します (リファラーを確認してください)。
または、コメントシステムを外注して、ぐっすり眠ってください。
私のブログでは、一種の妥協のキャプチャがあります。投稿にリンクが含まれている場合にのみキャプチャを使用します。ハニーポット入力フィールドも使用します。これまでのところ、これはほぼ100% 効果的です。ときどき、リンクを含まないすべてのフォームに何かを送信するスパマーがいます (通常は「いいサイト!」のようなもの)。これらの人々は、私が彼らが誰であるかを知るために電子メールを送ると思っているとしか思えません (私だけが見る電子メールアドレスを使用して)。
ハニー ポット フィールドを使用することに加えて、IP を自動的に禁止することができます (これは動的 IP では機能しません)。特に、ボットによって投稿されたリンクはすべて禁止できます。