背景
外域网站注册账号时会遇到需要输入图形验证码的情况,多数外域网站都喜欢使用 Google 的图形验证码工具 reCaptcha ,但是国内因为无法访问到 Google 的资源,就没有办法输入图形验证码,导致账号无法注册的情况。
例如,笔者在注册 Kaggle.com 时碰到提示 "Captcha must be filled out." 的提示信息,但是页面上却没有任何图形验证码显示。
解决方法
1. 重定向 Google 的资源到可访问的位置
(1)这里推荐使用 Edge 浏览器插件 Redirector ,商店里有多个,注意图标和作者。
安装并启用 Redirector 后,在其中设置转发规则,将针对 https://apis.google.com/js/api.js 或 https://www.google.com/recaptcha/api.js 的请求都转发到 https://www.recaptcha.net/recaptcha/api.js 。
具体设置如下图。
设置完成后,Redirector 会监控页面上的请求,自动转发响应的请求到指定的位置。
2. 改写 Content-Security-Policy,以允许 www.recaptcha.com
完成第一步后,api.js 文件终于可以访问了,但是页面上会显示出图片失效的状态,还是无法输入验证码。
这时查看后台 DevTools 可以发现网站规定了 CSP 只能允许 Google.com ,但由于我们转发了请求到 recaptcha.com ,CSP放行规则就失效了。
为了让 CSP 能放行 recaptcha.com,需要在页面访问时改写页头,添加 CSP 规则。这里需要使用到 Edge 浏览器的插件 ModHeader 。
安装并启用 ModHeader 以后,在改写规则中点击➕号,添加 Response header。
(Request headers不需要的话,可以点击右侧❌删除。)
在 Response headers 中添加一条规则,名称处选择 Content-Security-Policy ,在值中输入 frame-src https://www.recaptcha.com
验证设置
完成上面的设置后刷新外域网站的注册页,可以看见图形验证码已经出现。