java - 谷歌验证码 : How to get user response and validate in the server side?

标签 java javascript recaptcha

我正在做一个 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图像如下:

enter image description here

当我检查“我不是机器人”时,我得到以下信息:

enter image description here

如您所见,有一个“验证”按钮,根据我的测试,用户响应会发送给 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 请求即可

https://www.google.com/recaptcha/api/siteverify?secret=your_secret&response=response_string&remoteip=user_ip_address

并将 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/

相关文章:

javascript - 下载 Html + Blob 图像作为文本

javascript - ReCaptcha 不在 chrome 中显示(或占用空间)。

java - Api 可与 Postman 配合使用,但不适用于 Android 应用程序

java - @Transactional 和 Spring Data

javascript - Bootstrap 4.1 js 不工作

javascript - {{outlet}}、{{yield}}、{{render}} 和 {{partial}} 的 ember 助手不同

java - 用于验证 reCaptcha 的正确 URL

php - 如何将 Jquery Validate Plugin 与 recaptcha 集成?

java - 在 Arquillian 测试类中注入(inject)始终为 null

java - Struts2无法判断拦截器是否工作