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请求
您可以在reCaptcha文档中了解有关此过程的更多信息:https://developers.google.com/recaptcha/docs/verify
更新:如果您不关心某个人可以伪造结果,则可以使用JavaScript来做到这一点,例如:JSFiddle
有很多解决方案,主要问题是表单动作是下载链接,因此表单根本不需要验证。
如果您希望通过Google进行真实的验证码身份验证,则可以编写PHP代码进行验证,然后启动下载并使用表单操作中显示的页面。
或者,您可以使用数据回调g-recaptcha标签属性创建可更改表单操作的javascript,这样直到重新捕获后,表单操作才是链接。这将无法通过外部服务器验证客户的响应,并且可以被欺骗,但是在按下重新输入键之前,仍将阻止链接成为表单操作。
有关可用于附加javascript操作的标记属性的更多信息,请参见以下网址:https://developers.google.com/recaptcha/docs/display