我已尝试将下载链接插入带有reCaptcha的表单(根据Google的说明),但即使您未通过,提交按钮也会打开链接验证码挑战。
代码非常简单:
<head>
<script src='https://www.google.com/recaptcha/api.js'></script>
</head>
<body>
<form action="download link">
<input type="submit" value="download">
<div class="g-recaptcha" data-sitekey="xxx"></div>
</form>
</body>
有谁知道为什么这不起作用?谢谢!
答案 0 :(得分:1)
我认为你对Google reCaptcha如何运作感到困惑 - 它不会阻止POST(用户可以轻松环绕这样的事情),它用于允许服务器端用于检查用户不是机器人的代码。
这意味着你必须在服务器端有一些东西来检查提交的内容。你不能只在客户端做到这一点。 (虽然看起来Google正在做客户端的所有事情,但reCaptcha按钮实际上是在另一台服务器上的iframe中。)
例如。在此处查看Google的演示:https://www.google.com/recaptcha/api2/demo
请注意,当您单击“提交”时,它仍然会将数据POST回服务器 - 这是响应的服务器,说明您是否是人。
正如Google的文档所述:
当您的用户提交您整合reCAPTCHA的表单时,您将会这样做 作为有效负载的一部分获取具有名称的字符串 “G-验证码 - 响应”。要检查Google是否已经过验证 该用户,使用以下参数发送POST请求:
网址:https://www.google.com/recaptcha/api/siteverify
秘密(必填)xxx
响应 (必填)'g-recaptcha-response'的值。
remoteip结束 用户的IP地址。
您基本上需要检查POST请求secret
是否与您的Recaptcha帐户中的密钥匹配。如果是,则应该为用户提供下载链接,如果没有,则返回错误消息。
您可以在reCaptcha文档中了解有关此过程的更多信息:https://developers.google.com/recaptcha/docs/verify
更新:如果您不关心某人是否可以伪造结果,您可以使用JavaScript执行此操作:JSFiddle
答案 1 :(得分:0)
有很多解决方案,主要问题是表单操作是下载链接,因此表单根本不需要验证。
如果您希望通过Google验证是否需要真正的Google重新验证码身份验证,您可以编写验证然后启动下载的PHP代码并使用作为表单操作的页面。
或者,您可以使用data-callback g-recaptcha标记属性创建更改表单操作的javascript,以便在重新计算之后表单操作不是链接。这不会通过外部服务器验证客户的响应,并且可能会被欺骗,但是在按下重新访问之后,它仍然会阻止链接成为表单操作。
有关可用于附加javascript操作的标记属性的详细信息,请访问:https://developers.google.com/recaptcha/docs/display