如何在大量域名上使用reCAPTCHA v2?

7
之前的reCAPTCHA版本提供了创建全局密钥的选项,可以在任何域上使用。但是,在版本2中,此选项已经取消,并且reCAPTCHA网站声称“V2 API不支持全局密钥”。我正在处理大量可能会频繁更改而无需干预的域名,我不想每次都添加新域名到密钥中。是否有一种方法可以让reCAPTCHA在未明确授权每个域名的情况下在任何域上工作?
2个回答

13
可以在不验证每个域的情况下实现reCAPTCHA版本2.0:https://developers.google.com/recaptcha/docs/domain_validation。要这样做,请访问管理员控制台,然后在“您的reCAPTCHA站点”下选择相应的API密钥。接着,在“高级设置”下取消选中“验证reCAPTCHA解决方案的来源”。

安全警告

根据谷歌的说法,这样做会创建一个安全风险,需要你自己检查主机名

仅关闭此保护本身就会带来巨大的安全风险-你的密钥可以被任何人拿走并使用,因为没有对其所在网站进行限制。出于这个原因,当验证解决方案时,需要检查主机名字段,并拒绝来自意外来源的任何解决方案。


相关链接: (来源于"Stack Exchange信息安全")
- 为什么要验证Google reCAPTCHA响应的主机名?


0

注意:此适用于 reCAPTCHA API 的早期版本。请查看其他答案以获取更新的解决方案。


这好像不是很出名,但 reCAPTCHA 的文档提到可以使用安全令牌使一个密钥在多个域上工作。这个功能似乎恰好就是为这种情况设计的。

它是通过使用您站点的秘密加密 JSON 字符串创建的,但文档没有说明要使用哪种加密方法。这里是我在我的一个项目中使用的一些 PHP 代码,这应该对您使用的任何语言有所帮助。

$token = json_encode(array(
    'session_id' => bin2hex(openssl_random_pseudo_bytes(16)), // Random ID; no special format
    'ts_ms' => intval(round(microtime(true) * 1000))) // Time in milliseconds
);

$secret_key = '{reCAPTCHA secret key}';
$secret_key_hash = substr(hash('sha1', $secret_key, true), 0, 16);

$stoken_bin = openssl_encrypt(
    $token,
    'AES-128-ECB', // Encryption method
    $secret_key_hash,
    OPENSSL_RAW_DATA // Give me the raw binary
);

// URL-safe Base64 encode; change + to -, / to _, and remove =
$stoken = strtr(base64_encode($stoken_bin), array('+'=>'-', '/'=>'_', '='=>''));

1
安全令牌现已被弃用。 以下是文档链接:https://developers.google.com/recaptcha/docs/secure_token - Lethal Left Eye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接