我正在做一个 Java (JSP + Servlet) Web 应用程序(我知道这个问题与技术无关)。我希望使用最新的 Google reCAPTCHA 服务。
我正在使用此处找到的 Google reCAPTCHA 示例:
https://developers.google.com/recaptcha/docs/display#config
<html>
<head>
<title>reCAPTCHA demo: Simple page</title>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<form action="?" method="POST">
<div class="g-recaptcha" data-sitekey="my_site_key"></div>
<br/>
<input type="submit" value="Submit">
</form>
</body>
</html>
我可以看到显示的recaptcha图像如下:
当我检查“我不是机器人”时,我得到以下信息:
如您所见,有一个“验证”按钮,根据我的测试,用户响应会发送给 Google 进行验证。
如何获取用户响应,以便我可以在自己的后端代码中验证用户响应(如 Google 在 https://developers.google.com/recaptcha/docs/verify 中所建议的那样)。
g-recaptcha-response POST parameter when the user submits the form on your site
在服务器端,我可以通过单击“提交”按钮从参数“g-recaptcha-response”获取用户输入,仅当用户首先通过 Google 成功验证时。否则,“g-recaptcha-response”在服务器端为空白。这意味着我只有在客户端验证成功后才能进行服务器端验证。如果是这样,在服务器端进行另一次验证有什么意义,这是 Google reCAPTHA 提供的选项?
我有什么想念的吗?
最佳答案
新的 Google Recaptcha 最酷的地方在于验证现在完全封装在小部件中。这意味着,小部件将负责提出问题,一直验证响应,直到确定用户实际上是人类,然后您才会获得 g-recaptcha-response 值。 p>
但这并不能保证您的网站免受 HTTP 客户端请求伪造的影响。
任何具有 HTTP POST 知识的人都可以将随机数据放入 g-recaptcha-response 表单字段中,并欺骗您的网站,使其认为该字段是由 google 小部件提供的。所以你必须验证这个 token 。
在人类语言中,就像,
- 你的服务器:嘿 Google,有个家伙告诉我他不是机器人。他说你已经证实他是人类,他让我给你这个 token 作为证明。
- Google:嗯……让我检查一下这个 token ……是的,我记得这个家伙我给了他这个 token ……是的,他是用肉和骨头让他通过。
- 你的服务器:嘿 Google,还有一个家伙告诉我他是人类。他还给了我一个 token 。
- Google:嗯……这和你上次给我的 token 一样……我很确定这家伙是想愚弄你。告诉他离开你的网站。
验证响应非常简单。只需发出 GET 请求即可
并将 response_string 替换为您之前通过 g-recaptcha-response 字段获得的值。
您将获得带有 success 字段的 JSON 响应。
更多信息在这里: https://developers.google.com/recaptcha/docs/verify
编辑:它实际上是一个 POST,根据 documentation here .
关于java - 谷歌验证码 : How to get user response and validate in the server side?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27297067/