web-dev-qa-db-ja.com

キャプチャを使用せずにコメントスパムをブロックする

コメントのスパムをブロックするキャプチャ以外の方法は何ですか?

50
ian

私の経験では、現在最も効果的な方法はハニーポット入力フィールドであり、CSSを介してユーザーに表示されません(visibility:hiddenなどのいくつかの異なる方法を使用するのが最適です) 、サイズを0ピクセルに設定し、ブラウザウィンドウのはるか外側に絶対位置を設定します);とにかくそれらが満たされている場合、それはスパムボットであると想定できます。

このブログ は、私が自分で試した(これまでのところ100%成功している)かなり複雑な方法について説明していますが、ハッシュされたフィールド名を持つすべてのものをスキップして同じ結果を得ることができると思います単純なハニーポットフィールドをいくつか追加するだけです。

61

1)フォームにセッション関連情報を追加する例:

<input type="hidden" name="sh" value="<?php echo dechex(crc32(session_id())); ?>" />

次にポストバックで、セッションが有効かどうかを確認します。

2)Javascript-only。提出時に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="" />   

その後、サーバー側で確認できます。

14
mauris

AkismetにはAPIがあります。誰かがそのためのラッパークラス(BSD liscense)を次の場所に作成しました: http://cesars.users.phpclasses.org/browse/package/4401.html

ベイジアンフィルタークラスもあります(BSD Liscenseも同様) http://cesars.users.phpclasses.org/browse/package/4236.html

9
easement

これは、キャプチャを使用せずにスパムボットやブルートフォース攻撃をブロックする簡単なトリックです。

これをあなたのフォームに入れてください:

<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を増減できます。

6
StoneHeart

ハニーポット理論もあります。私はハニーポットを他の形のスパム削減と組み合わせるのを楽しんでいます。

http://www.projecthoneypot.org/

5
reactivePixel

もちろん、単純なベイジアンフィルター:

http://blog.liip.ch/archive/2005/03/30/php-naive-bayesian-filter.html

4
ChickenMilkBomb

別の一般的なアプローチは、ユーザーに簡単な質問をすることです(「火は熱いですか、冷たいですか?」、「2 + 7は何ですか?」など)。それは少しキャプチャです-お気に入り、ただしスクリーンリーダーを使用して視覚障害を持つユーザーがアクセスしやすくなります。 WordPressブログで頻繁に目にするので、これを実行するWordPressプラグインが必要です。

3
Kip

多くの人がすでに提案しているように、ハニーポット入力フィールドを使用します。ただし、他に2つのことを行う必要があります。まず、ハニーポットである入力フィールドの名前/ IDをランダム化します。セッション内の有用なフィールドの状態(およびCSRF攻撃に対して使用されるフォームトークン)を保存します。たとえば、名前、電子メール、メッセージを取得するためのフィールドがあります。フォームには、トークンである「トークン」、このフォームの名前である「jzefkl46」、電子メールの「ofdizhae」、メッセージの「45sd4s2」、ハニーポットの「fgdfg5qsd4」があります。ユーザーセッションでは、次のようなことができます

 array( "forms" => array( "your-token-value" => array( "jzefkl46" => "name"、
 "ofdizhae" => "email"、
 "45sd4s2" => "メッセージ"、
 "fgdfg5qsd4" => honey "));

フォームデータを取得したら、関連付けし直す必要があります。

2番目に、ロボットにはハニーポットフィールドを回避する機会がたくさんあるため(25%の確率)、ポットの数を掛けます。それらの10または20を使用すると、HTMLにあまりオーバーヘッドをかけずにボットに困難を追加します。

2
Arkh

Sblam! は、Akismetに似たオープンソースのフィルターです。

ナイーブベイジアンフィルタリングを使用し、送信者のIPと複数の分散ブラックリスト内のリンクをチェックし、HTTPリクエストの正当性をチェックし、JSの存在をヒントとして使用します(ただし要件ではありません)。

2
Kornel

通常のCAPTCHAは現在スパムボットで解決可能です。

代わりに検討してください "text CAPTCHAs" :「1 + 1は何ですか?」のようなロジックまたは一般的な知識の質問または「カスタード将軍の白い馬は何色ですか?」質問は静的にすることもできます(すべての試行で同じ質問)。

Text Logic CAPTCHA

(Taken from http://matthewhutchinson.net/2010/4/21/actsastextcaptcha )

ジェフ・アトウッドも彼のブログでこのような検証を使用していると思います。 (私が間違っていれば訂正してください)

いくつかのリソース:

2
rlb.usa

次のような簡単な数学的質問を通じて、私のWebサイトのスパムを約99%削減しました。

2 + 4とは[TextBox]

ユーザーが「6」と回答した場合、ユーザーは質問/コメントを送信できます。

私と同じような解決策がCoding HorrorのJeff Atwoodに働きます!

1
azamsharp

リンクを許可しない。リンクがなければ、スパムは役に立たない。

[編集]中間の方法として、「良い」サイト(通常は自分のサイト)へのリンクのみを許可します。それらはほんの一握りしかないので、ユーザーの要求に応じて追加するか、リンクを確認するまでコメントを保持できます。よければ追加します。

しばらくすると、これをオフにして、リンク付きのコメントを自動的に拒否し、ユーザーからの苦情を待つことができます。

1
Aaron Digulla

Akismet のようなサードパーティを使ってみてください。 APIキーは個人で使用する場合は無料です。また、Zend Frameworkには package があります。

1
Kieran Hall

ほとんどのボットは、フォーム全体に記入して送信するだけです。機能する簡単なトリックは、通常JavaScriptを使用して非表示にする通常のフィールドを作成することです。サーバー側では、このフィールドが入力されているかどうかを確認してください。もしそうなら、それは確かにスパムです。

1
clops

honeyポットフィールドを使用することで、IP(動的IPでは機能しません)を自動的に禁止し、特にボットによってポストされたリンクを禁止できます。

0
Sanil

例やアイデアについては、いくつかのwpスパム対策プラグインをチェックアウトしてください

キャプチャを使用せずに多くのニーススパム対策があります。

私がお勧めするもの:hashcash、nospamnx、typepad antispam。これらはすべてスパムをブロックするさまざまな方法を使用しており、私はそれらすべてを使用しています。 hashcash + nospamnxは、ほとんどすべてのスパムボットをブロックします。タイプパッドアンチスパムは、人間が入力したほとんどのスパムをブロックします。

これらも良いものです:spambam、wp-spamfree、anti-captcha、bad-behaviour、httpblなど

また、ボットを直接ブロックする単純な.htaccess POST自分のサイトからのものではない(リファラーを確認)

または、コメントシステムを外部委託して、不満を抱いてぐっすりと眠ります。

0
DennyHalim.com

Akismetは良い代替手段です。彼らはあなたの投稿のスパムをチェックし、非常に効率的に機能します。あなたは彼らのライブラリをロードする必要があるだけです。 http://akismet.com/development/

0
user190414

私のブログでは、一種の妥協のキャプチャーがあります。私は、投稿にリンクが含まれている場合にのみキャプチャーを使用します。ハニーポットの入力フィールドも使用しています。これまでのところ、これはほぼ 100%効果的です。時々、リンクを含まないすべてのフォームに何かを送信するスパマーがいます(通常は「素敵なサイト!」のようなものです)。これらの人々は私が彼らを知るために彼らに電子メールを送ると思っていると仮定することができます(私だけが見ている電子メールアドレスを使用します)。

0
Kip