【问题标题】:validate captcha before submit提交前验证验证码
【发布时间】:2014-02-12 00:22:16
【问题描述】:

我使用captcha 进行表单注册,其中我使用validation engine 进行表单内联验证。我一直在验证captcha 的权益。

<p class="veriText">
    <label>Enter the Verification Text </label> <span style="color:red;">*</span>
    <input class="validate[required] text-input" type="text" name="captcha" id="captcha" class="text" value="" />                   
</p>
<img src="<?= get_bloginfo('template_url'); ?>/captcha_code_file.php?rand=<?php echo rand();?>" id='captchaimg'><br/>

PHP 验证:(完美运行)

if(strcasecmp($_SESSION['code'], $_POST['captcha']) != 0){
  //----mismatch values
}

但是在 js 中我也尝试过类似的东西

var session = <?php echo $_SESSION['code'] ?>;  // this value is different 
                                                // from captcha image

是否可以在 Javascript/jQuery 中提交表单之前验证验证码?

【问题讨论】:

  • 如果我错了,请纠正我,但验证码是非机器人化请求,如果您要发出多个请求,那么验证码可以绕过或欺骗请求,因为它不绑定到单个请求,如果您要在源代码中回显代码,则更糟。如果值无效,则使用其他字段验证验证码 ect server-side 使用 jquery 重新加载验证码,就像任何其他输入一样。

标签: javascript php jquery validation captcha


【解决方案1】:

假设var session = &lt;?php echo $_SESSION['code'] ?&gt;; 行在您的html 页面中。

当页面生成时,您的验证码图像脚本不会被调用,因此$_SESSION['code'] 不会被初始化。您获得的值是从上一个请求到captcha_code_file.php 的code。一旦您的页面被加载(至少是 html 部分)并且浏览器决定调用captcha_code_file.php,您的验证码图像就会被调用并创建一个新的$_SESSION['code']。

我不建议这样做,但是如果您想获取当前的$_SESSION['code'],请尝试使用 Ajax 请求从另一个 php 文件中检索新的$_SESSION['code'](不要调用captcha_code_file.php,否则您的会话将再次重置。

注意:切勿尝试在用户端验证您的验证码。您正在破坏验证码的主要目的。

【讨论】:

    【解决方案2】:

    创建一个使用JavaScript检查验证码的ajax请求,示例如下:

    var postData = $("form").serialize();
    var requestUrl = '/check_capcha.php';
             $.ajax({
                 type: "POST",
                 dataType: "json",
                 data: postData,
                 url: requestUrl,
                 success:function(data){
                    // success or fail message
    
                 }
             });
    

    check_capcha.php 包含:

    if(strcasecmp($_SESSION['code'], $_POST['captcha']) != 0){
      //----mismatch values
    echo 0;
    }else{
    echo 1;
    }
    exit;
    

    【讨论】:

      【解决方案3】:

      您可以将 javascript 代码放在前面(尽管整个页面的会话是相同的)。 只需在纯文件中尝试一个虚拟代码并检查会话值 要么 您可以使用 $.ajax() 调用 PHP 页面进行验证码验证

      【讨论】:

        【解决方案4】:

        html 是这样的

          $rand = mt_rand(100000,999999);
          <span class="captcha"><?php echo $rand; ?></span>
          <input name="captcha" type="text" id="captcha-compare" />
        

        在 javascript 中使用类似的东西作为验证引擎

         $('#frm-register').submit(function() {
            if( $('#captcha-compare').val() != $('.captcha').text() ) {
                $('#captcha-compare').validationEngine('showPrompt', 'Invalid captcha', 'load');
                return false;
            }
         });
        

        在 php 中首先在会话中获取 $rand 然后提交捕获输入文本验证码和会话

        【讨论】:

          【解决方案5】:

          您可以尝试以下代码来验证验证码,也可以使用 AJAX 代码在提交代码之前验证值。

          <script language="JavaScript">
              var session = '<?php echo $_SESSION['code'] ?>';
              if(Form.captcha.value == session)
              {
                return true;
              }
              else
              {
                Form.submit();
              }
              </script>
          

          【讨论】:

            猜你喜欢
            • 2016-12-30
            • 2017-01-15
            • 1970-01-01
            • 2023-03-30
            • 1970-01-01
            • 1970-01-01
            • 2017-11-13
            相关资源
            最近更新 更多