1

ランダムな方程式を表示する php 関数を作成しました。正しい回答が提供されない場合、送信は失敗します。方程式は次のようになります。

[ランダムな数字またはテキスト番号] [+、-、x をランダムに選択] [ランダムな数字またはテキスト番号]= ?

8+2=?、または Seven - 4 = ? など

これを手動でテストしたところ、美しく動作するようです。CAPTCHA に正しく答えることができません。この CAPTCHA にもかかわらず、何かまたは誰かがスパムを投稿しています。 私の質問は、この問題を解決できるプログラムはありますか?

ここに私のフォームがあります:

<form action="scripts/handler_post.php" method="post" id="gb_form">
                    <h3>Leave us a comment:</h3><br />
                    <div id="form_msg"><?php echo $msg; ?></div>
                    <input type="text" name="name" value="Your Name" />
                    <textarea name="message">Your Message</textarea>

                    <?php include('includes/bmw_captcha.php'); ?> 
                    <div style="color:red; font-size:90%;">*What does <?php echo $array_num1[1] . " " . $array_calculation[0] . " " . $array_num2[1] . " = "; ?>    
                    <input type='text' maxlength='2' name='captcha' style="color:#640513; width:25px;" />?</div>
                    <div><span style="font:italic 90% Arial; color:#666;">(For security purposes, please answer this CAPTCHA problem.)</span></div>
                    <input type="hidden" name="captcha_answer" value="<?php echo $array_calculation[1]; ?>" />

                    <input type="submit" name="submit_button" value="Post" />
                </form>

フォームを処理するスクリプトは次のとおりです。

// submitted values
$name       = clean_string( $_POST['name'] );
$message    = clean_string( $_POST['message'] );
$captcha    = clean_string( $_POST['captcha'] );
$captcha_ans= clean_string( $_POST['captcha_answer'] );

// check if name var is empty or contains digits
if( empty($name) || (strcspn( $name, '0123456789' ) != strlen( $name )) ) 
{ header( 'Location: /guestbook.php?msg=n' ); }

else if( empty($message) )
{ header( 'Location: /guestbook.php?msg=m' ); }

else if( empty($captcha) || $captcha != $captcha_ans )
{ header( 'Location: /guestbook.php?msg=cap' ); }

else 
{
    $query = "
            INSERT INTO $table_posts ( id, name, message, timestamp ) 
            VALUES( 0, \"$name\", \"$message\", now() )
    ";

    $result = $db_connect->query( $query ); // execute the query

    if( $result )
    {       
        header('Location: ../guestbook.php?msg=1');
    }

    else
        header('Location: ../guestbook.php?msg=2');
}
4

3 に答える 3

2

代わりに、キャプチャへの回答をセッション変数に保存する必要があります。フォームを介して平文で送信すると、ロボットはフィールドに必要な値を設定するだけで済みます。ボットは通常、すべての不明なフィールドをijhsg87dfb34captchaのような何らかの文字列に設定しているため、と フィールドの両方captcha_answerを同じ値に設定すると成功します!

于 2012-09-08T18:35:23.090 に答える
1

非常に簡単な方法は、隠しフィールドを使用することです。POST を処理するスクリプトで、そのフィールドが入力されているかどうかを確認します。入力されている場合は、通常のユーザーにはそのフィールドが表示されないため、BOT などでしたが、BOT などは単に表示されます。すべてのフィールドにやみくもに記入してください。

于 2012-09-08T18:42:07.847 に答える
0

非キャプチャ セキュア フォームを試すことができます。これを確認してください http://docs.jquery.com/Tutorials:Safer_Contact_Forms_Without_CAPTCHAs

于 2012-09-08T18:37:42.813 に答える