2012-02-05 7 views
1

スパマーを防ぐための非常に妥当な検証を作成しようとしています。私はラベルが「What's 2 + 7?」と言うフィールドを必要とします。 Javascriptは結果を知り、検証を渡す必要があります。フォーム上のjavascriptの検証のための数学の合計

var valid = ''; 
var required = ' is required'; 
var sum = $('form #sum').val(); 

if (sum == '9') { 
    valid += '<p>An answer is' + required + '</p>'; 
} 
+1

何も入力されていないことを示す 'if(sum == '')'はありませんか? – mrtsherman

+0

わかりません。私はこれが私が間違っているところだと思う。どのような答えが「すべきか」、それが間違っている場合はどうすればいいのかを述べるにはどうすればいいですか? –

+2

@RichardJamesあなたは、ボットによって自動的に渡されないジャバスクリプトだけに基づいて簡単な予防策を書くことができますが、サーバ側のチェックがないと、特定の投稿データを作成する人が手作業でバイパスする可能性があります。 – Cheery

答えて

2

もっと多くのコードを見ることなく、必要なことを正確に伝えるのは難しいです。それは、サーバー側を生成し、それがCAPTCHAのより、アクセシビリティのために多くの優れているされている場合

このような単純な質問は非常にうまく動作する可能性があります。効果的であるためには、質問と回答もランダムに選択する必要があります。

ユーザビリティの目的で、送信前のクライアントサイド検証を含めることを選択できますが、スパムボットはJavaScriptを無視するため、実際に複雑な作業を行わない限り、それらを防ぐことは無意味です。

ボーナスのヒントトピック:あなたのJQueryセレクターは非効率的です。 id-selectorを使用する場合は、その親を含める必要はありません。

+0

ありがとうございます、あなたの提案を調べます。 –

2

Javascriptを介してクライアント側の検証がスパマーを防ぐために多くをするつもりされていません:それはの線に沿って何かだろう、私は、これを書くのに苦労しています。ほとんどのスパマーはJavascriptを解析しないボットを持っています。

これを確実に行う唯一の方法は、サーバー側で処理することです。

私はreCAPTCHAのようなものを試してみることをお勧めします:http://www.google.com/recaptcha

+1

本当、あなたはreCaptchaのようなキャプチャのいくつかの並べ替えを使用する必要があります。 –

+1

私がうまくやっていることを実装しているサイトをいくつか見てきたので、Captchaから遠ざかるように努力していましたが、ここでのコンセンサスはクライアント側の検証を気にすることではないと思います。 –

+0

@RichardJamesクライアント側の検証を試みると、合法的なポスターを投稿するのが難しくなります。ほとんどのスパマーを抑えることはできません。 – Jonathan

0

[OK]をので、これはそれ自体があなたの質問に答えるに行くのではありませんが、私はあなたがこれを行わないことを示唆します。これらのスパム防止メカニズムを作成することは、実際には非常に複雑で、スパマーが実際にあなたのサイトを訪れたければ、あなたのアイデアは実際にはうまくいかないでしょう。 recaptchaというサービスを調べることをお勧めします。無料で簡単にセットアップでき、ユーザーが入力した情報は古い書籍の電子化に使用されます。

0

私がコメントで書いたように、あなたは自分自身でわずかJavaScriptを使用してデータを掲示からボットを防ぐことができます。私はあなたがそれを行うことができる方法を説明してみましょう:

  1. あなたが最初にフォームのため間違っていたり、空のアクションを設定し、後で、ジャバスクリプトの助けを借りて、「合計に答えた場合正しいものに設定することができ'正しいものだった。または、ほとんどのスパムボットがjsを実行しないので、「sum」の要求がなくても。

  2. falseの初期値 という値の「passed」という名前の隠しフィールドを挿入できます。再度、フォームの対話に基づいて、これを に設定し、後でサーバー上のフォーム(この 隠しフィールドの値)からデータをチェックすることができます。私はほとんどの場合、好む

  3. 最後の方法は、とフォームのHTML コードをエンコード例えば、BASE64とHTMLコードに戻ってそれを変換するためにはJavaScript を使用することです。ボットは、JSを実行しないとすぐに、彼ら も、あなたはページ上のフォームを持っていることを知ることができません。ここでは良い部分は、フォームで何かを入力するように、人に依頼する必要がないことです。

これらの方法はすべて、あなたのウェブサイト上のスパムに興味がある人がバイパスすることができます。彼は、サーバーに送られた最終的なデータをチェックして、サーバーに同じ要求のセットを作成することができます。そのため、手動で作成されたスパム要求からでもフォームを作成できないように、サーバー側のサポートが必要です。

+0

ありがとう、私のため少し進んだが、それを調べます。 –

+0

これは、投稿URLにカールを直接使用して投稿を送信できないようにするものではありません。スパム送信者はあなたの実際のフォームを使用して提出するつもりはなく、サーバー側のスクリプトに直接投稿するツールを使用します。 – Jonathan

+0

@ジョナサンは全体の部分として答えを読んだ!私はコメントと私の答えでそれを書いた。あなたのフォームが初期的に不正確な場合、jsを使わないボットは有効なデータを送信できません! – Cheery

関連する問題