Google的新reCaptcha网站验证无法响应

时间:2015-07-02 14:34:42

标签: javascript recaptcha verification

通过用户验证获得g-recaptcha-response后,我site verification

我发送xhr POST参数并获得200 OK,但没有响应,因为它应该是:

{
  "success": true|false,
  "error-codes": [...]   // optional
}

代码

<script type='text/javascript'>    
var onReturnCallback = function(response) { 
document.getElementById('resp').innerHTML = response; // works well
//alert('grecaptcha.getResponse() = ' + grecaptcha.getResponse()); // works well too
$.post("https://www.google.com/recaptcha/api/siteverify", 
          { secret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            response: response,
            remoteip :  "<?php echo $ip;?>" // optional, does not influence an empty result           
           }).complete(function( data ) {
                alert( "Data returned from POST: " + data.toString() );
                console.dir(data);
              });  

};
</script>
Form.  
<form method="post"> 
<div class="g-recaptcha" data-sitekey="6LdYKQkTAAAAAD9K6-kHspFUPUnftw1RxP5_awi0" data-callback="onReturnCallback" data-theme="light">       </div>
<input name="send" type="submit" />
</form>

我在控制台中打印的对象是完全空的(statusText='error'除外),请参阅shot

控制台中还有其他错误:

  

XMLHttpRequest无法加载https://www.google.com/recaptcha/api/siteverify。 No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。起源&#39; http://tarex.ru&#39;因此不允许访问。

如何处理?我可以更改原始标题吗?如何验证?

演示的link

2 个答案:

答案 0 :(得分:2)

由于所谓的“同源策略”(SOP)阻止XSS攻击,不可能向服务于网站的主机之外的主机发出XHR(“AJAX请求”)。

但是,您可以从php代理发布到reCaptcha站点,您可以在自己的主机上运行。给出了一个例子in this answer。这也可以防止您的秘密被公开给那些查看客户端源代码的人。

另一种可能性(取决于您要使用的服务)是JSONP。由于XHR是禁止的,但是从外部主机加载脚本不是,可以通过查询参数将回调函数的名称添加到脚本URL。一旦加载外部资源,就会调用此函数。但据我所知,reCaptcha不支持JSONP。

答案 1 :(得分:0)

reCaptcha据称支持jsonp作为dataType参数的合法值。