0

今回も小さな Javascript スニペットで助けが必要です。また、PHP も少し含まれています。PHPは次のとおりです(乱数を生成するため)

$no1 = rand(0,9);
$no2 = rand(0,9);
$no3 = $no1+$no2;

私はこれを非常に単純な連絡先フォームのキャプチャ方法として使用しています。私は、グーグル検索のいたるところで見つけられるかさばる方法のファンではありません。

このコードを検証するために、次の Javascript を使用します

if(document.forms["feedback"].check.value !== "<?php echo $no3; ?>"){
    window.alert("Incorrect security code");
    return false;
}

次に、フォーム内でこれを使用します。

<?php echo $no1; ?> + <?php echo $no2; ?> = <input name="check" type="text" id="check" size="3">

それはすべて想定どおりに機能しますが、ここで私のjavascriptで $no3 を直接エコーしないようにする方法があった場合:

if(document.forms["feedback"].check.value !== "<?php echo $no3; ?>")

そうすれば、ソースを表示して答えを見つける方法がなくなります。これが単純な数学の問題であることは十分承知しており、ソースを表示する方法を知っている人なら間違いなく追加できますが、私の同僚はこれを強く主張しました。

それで、誰も私を助ける方法を知っていますか?私は JavaScript を含め、このほとんどを手作業で書いたので、私のコードが恐ろしく古くなっていることを教えてください..

ありがとう!

4

1 に答える 1

0

$no1および$no2変数をタグ (または Javascript で直接ターゲットにできるもの) 内にspan配置し、JS を使用してこれらのスパンから値を取得し、それを使用して、PHP を使用してソースにエコーするのではなく、JS で合計を計算します。#captcha-1および#captcha-2使用するような ID にまたがっgetElementByIDて値を取得し、Javascript で完全に検証を行います。

脳を持っている人なら誰でもバイパス方法を理解するのは簡単ですが、少なくともソースコードのどこにもJS変数として答えはありません.

検証プロセスを完全に非表示にする場合は、JS と AJAX を使用して、ユーザーが入力した合計をサーバー側の PHP 関数に送信し、それが等しいかどうかを確認してから$no1 + $no2、応答の一部としてフォームを送信する必要があります。成功関数。

とはいえ、これは依然として非常に弱いスパム抑止方法です。

于 2013-11-08T18:20:22.213 に答える