![](/img/trans.png)
[英]Invisible re-captcha fully from javascript without form submission
[英]How to detect if a re-Captcha site key is valid via javascript?
由于谷歌没有提供官方方法来检查这一点,我刚刚实施了一种解决方法,在谷歌的 Recaptcha URL 上执行GET
请求。 我已经使用 PHP 进行了制作,但是为 JavaScript 调整解决方案并不难,尽管由于Same Origin Policy 可能会导致跨源错误。 因此,如果有人使用 JavaScript 测试此解决方案,请告诉我们它的运行情况(如果它不起作用,始终可以在您自己的服务器上运行 AJAX 并直接从您的服务器检查有效性)。
除此之外,就我而言,我使用的是 Invisible ReCaptcha v2,但我认为这种方法也可用于其他 Recaptcha。
<iframe>
上的src
参数。 $recaptcha_url = sprintf(
'https://www.google.com/recaptcha/api2/anchor?ar=1&k=%s&co=%s&hl=%s&size=%s',
RECAPTCHA_SITE_KEY,
'<co_param_value>',
'en-US',
'invisible'
);
在 JavaScript 上,它会是这样的:
recaptcha_url = 'https://www.google.com/recaptcha/api2/anchor?ar=1&k=' + RECAPTCHA_SITE_KEY + ' &co=' + CO_VALUE + '&hl=en-US&size=invisible';
如果您不使用 Invisible Recaptcha,则size
参数必须不同。 但是您也可以省略它,因为至少在我的测试中,没有必要检查站点密钥是否有效(语言参数hl
)。
wp_remote_get
。 在 JavaScript(实际上是 jQuery)上,您可以使用$.get
。 $.get( recaptcha_url, function(data, status){ ... });
'Recaptcha.anchor.ErrorMain.init'
。 这意味着当 Recaptcha 站点密钥对当前域无效时,Google 会处理错误,并且此字符串会出现在响应正文中(实际上,此字符串会导致任何 ReCaptcha 错误,因此请记住这是一种解决方法)。 如果您使用的是 Wordpress,则可以使用wp_remote_retrieve_body
。 像这样的东西:
$response = wp_remote_get( $recaptcha_url );
$response_body = wp_remote_retrieve_body( $response );
if( strpos( $response_body, 'recaptcha.anchor.ErrorMain.init' ) !== false ) {
// Site is not valid for current Recaptcha Keys
}
在 JavaScript 上,我认为您可以检查$.get
上收到的data
变量。
不幸的是,这不是一个强有力的解决方案。 Google 可以更改请求和响应,这可能会破坏实现。 但是我们无能为力,因为没有官方电话来检查钥匙。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.