谷歌的 Recaptcha 具有hostname
“烘焙”验证。当用户提交 Recpatcha 响应时,获取响应的域将根据您在设置 Recaptcha 时提供的域白名单进行验证。
但是,如果您在多个域中使用 Recaptcha,您可以选择禁用 Google 的默认hostname
验证并自行处理 ( https://developers.google.com/recaptcha/docs/domain_validation )。
谷歌伴随着一个突出的警告,即不验证hostname
任何给定的响应会使您面临安全漏洞。但是考虑到欺骗 . 是多么容易hostname
,我看不出这如何提供任何程度的安全性增强。
hostname
一个简单的测试向我证明了欺骗Google 用来验证 Recaptcha 响应来源的值是多么容易:
$ sudo nano /etc/hosts
127.0.0.1 spoofedhostname.com
然后当我发送一个测试 Recaptcha 响应时,我得到的结果如下:
{
"success": true,
"challenge_ts": "2016-12-24T14:15:22Z",
"hostname": "spoofedhostname.com"
}
那么,为什么还要费心进行主机名验证呢?
- 考虑到欺骗的容易程度,主机名验证在很大程度上是无用的。
- 这似乎与防止攻击者窃取您的 Recaptcha 公钥然后生成一堆有效的 Recaptcha 响应有关,他们可以存储这些响应,然后在对敏感端点 (
/login
,/reset-password
) 进行自动化攻击时使用这些响应。从理论上讲,这可以用于某种蛮力攻击,但考虑到响应令牌在 1 分钟后过期,这实际上没有意义。而且您仍然需要手动解决所有的 Recaptchas,您可以简单地在实际域上执行此操作。并再次,他们可以很容易地欺骗只是即使您的域名正在做hostname
验证。
这对我来说没有任何意义,但考虑到它是谷歌的产品,我不得不认为他们的安全工程师知道一些我不知道的事情。
我错过了什么?