使用谷歌的reCaptcha来保护机器人的下载链接

时间:2015-12-04 15:57:02

标签: html captcha recaptcha

我已尝试将下载链接插入带有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>

JSFiddle

有谁知道为什么这不起作用?谢谢!

2 个答案:

答案 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