关于html:使用Google的reCaptcha保护来自机器人的下载链接

Using Google's reCaptcha to protect download link from bots

我尝试将下载链接插入带有reCaptcha的表单中(按照Google的说明),但是即使您未通过验证码验证,提交按钮也会打开该链接。

代码非常简单:

1
2
3
4
5
6
7
8
9
<head>
<script src='https://www.google.com/recaptcha/api.js'>
</head>
<body>
<form action="download link">
    <input type="submit" value="download">
   
</form>
</body>

JSFiddle

有人知道为什么这行不通吗?谢谢!


我认为您对Google reCaptcha的工作方式有些困惑-它不会阻止POST(用户可以轻松绕过此类事件),它用于允许服务器端代码检查用户是否不是机器人。

这意味着您还必须在服务器端拥有一些内容来检查正在提交的内容。您不能只在客户端这样做。 (尽管看起来Google正在进行客户端的所有操作,但reCaptcha按钮实际上位于另一台服务器上的iframe中。)

例如。在此处查看Google的演示:https://www.google.com/recaptcha/api2/demo

请注意,当您单击"提交"时,它仍会将数据回传到服务器上-服务器会响应说您是否是人类。

如Google文档所述:

When your users submit the form where you integrated reCAPTCHA, you'll
get as part of the payload a string with the name
"g-recaptcha-response". In order to check whether Google has verified
that user, send a POST request with these parameters:

URL: https://www.google.com/recaptcha/api/siteverify

secret (required) xxx
response
(required) The value of 'g-recaptcha-response'.
remoteip The end
user's ip address.

您基本上需要检查POST请求secret是否与Recaptcha帐户中的密钥匹配。如果是,则应该给用户一个下载链接,如果没有,则返回错误消息。

您可以在reCaptcha文档中了解有关此过程的更多信息:https://developers.google.com/recaptcha/docs/verify

更新:如果您不关心某个人可以伪造结果,则可以使用JavaScript来做到这一点,例如:JSFiddle


有很多解决方案,主要问题是表单动作是下载链接,因此表单根本不需要验证。

如果您希望通过Google进行真实的验证码身份验证,则可以编写PHP代码进行验证,然后启动下载并使用表单操作中显示的页面。

或者,您可以使用数据回调g-recaptcha标签属性创建可更改表单操作的javascript,这样直到重新捕获后,表单操作才是链接。这将无法通过外部服务器验证客户的响应,并且可以被欺骗,但是在按下重新输入键之前,仍将阻止链接成为表单操作。

有关可用于附加javascript操作的标记属性的更多信息,请参见以下网址:https://developers.google.com/recaptcha/docs/display