文章目录

  • HTML代码
  • JS代码
  • Java代码
  • 项目开源地址
  • 参考资料



HTML代码

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>登录</title><link rel="stylesheet" type="text/css" href="css/json-viewer.css"/><style type="text/css">body {margin: 0 100px;font-family: sans-serif;}pre#login_result {border: 1px solid #aaa;}</style><script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script><script src="js/json-viewer.js" type="text/javascript" charset="utf-8"></script><script src="js/api.js" type="text/javascript" charset="utf-8"></script><script src="js/login.js" type="text/javascript" charset="utf-8"></script></head><body><h1>欢迎使用登录功能</h1><form id="login"><table><tr><td>用户名:</td><td><input type="text" id="username" name="username" value="" /></td></tr><tr><td>密码:</td><td><input type="password" id="password" name="password" /></td></tr></table><div class="g-recaptcha" data-sitekey="6LeQUNkUAAAAAHlQ77JtWxNj8pKsFBkkUY-yu-2I"></div><input id="login_btn" type="button" value="登录"/></form><pre id="login_result"></pre></body>
</html>

JS代码

$(function(){$("#login_btn").click(function(){var username = $("#username").val();var password = $("#password").val();if(username == "" || username == null || username == undefined){console.log("用户名为空");return;}if(password == "" || password == null || password == undefined){console.log("密码为空");return;}$.ajax({ url: "http://192.168.2.105:8080/hello/login/", type: "POST",data: $("#login").serialize(),dataType: "jsonp",success: function(data){try {var input = eval('(' + JSON.stringify(data) + ')');}catch (error) {return alert("Cannot eval JSON: " + error);}var options = {collapsed: true,rootCollapsable: true,withQuotes: false,withLinks: true};$('#login_result').jsonViewer(input, options);//alert(data.sname);//$("#result").text(JSON.stringify(data,null,2));},});});
})

Java代码

package com.yangzc.controller;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.util.JSONPObject;
import com.yangzc.entity.Student;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;@Controller
@RequestMapping("/hello")
public class HelloWorld {@RequestMapping("/welcome")public String sayHi(Model model){model.addAttribute("message", "欢迎使用Spring MVC!");return "hello";}@RequestMapping("/detail/{sno}")@ResponseBodypublic Object detail(@PathVariable Integer sno, @RequestParam(required = false) String callback){Student stu = new Student(sno,"刘亦菲",new Date(),false,null);if(callback==null||callback.equals("")){return stu;}////MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(stu);//mappingJacksonValue.setValue(callback);return new JSONPObject(callback,stu);}@RequestMapping(value = "/login")@ResponseBodypublic Object login(@RequestParam(name = "username") String userName,@RequestParam(name = "password") String password,@RequestParam(name = "g-recaptcha-response") String recaptchaResponse,@RequestParam(required = false) String callback){Map<String,Object> map = new HashMap();if(recaptchaResponse==null||recaptchaResponse.equals("")){map.put("code",11);map.put("msg","验证码为空!");return new JSONPObject(callback,map);}CloseableHttpClient client = HttpClientBuilder.create().build();HttpPost request = new HttpPost("https://www.recaptcha.net/recaptcha/api/siteverify");request.setHeader("Content-type", "application/x-www-form-urlencoded");StringEntity body = null;HttpResponse response = null;JSONObject obj = null;//System.out.println("secret=6LeQUNkUAAAAACv1Ei_26r0k7P_361Rx591vLfsx&response=" + recaptchaResponse);try {body = new StringEntity("secret=6LeQUNkUAAAAACv1Ei_26r0k7P_361Rx591vLfsx&response=" + recaptchaResponse);request.setEntity(body);response = client.execute(request);String data = EntityUtils.toString(response.getEntity());obj = JSON.parseObject(data);if(!obj.getBoolean("success")){map.put("code",17);map.put("msg","验证码错误!");map.put("recaptcha",obj);return new JSONPObject(callback,map);}} catch (Exception e) {e.printStackTrace();map.put("code",16);map.put("msg","出现异常!");return new JSONPObject(callback,map);} finally {try {client.close();} catch (IOException e) {e.printStackTrace();}}if(userName.equals("admin")&&password.equals("123456")){map.put("code",0);map.put("msg","登录成功!");map.put("recaptcha",obj);}else{map.put("code",15);map.put("msg","账号或密码错误!");}return new JSONPObject(callback,map);}
}

项目开源地址

https://github.com/yangzc23/jsonpdemo

参考资料

[01] google reCaptcha - [“missing-input-response”,“missing-input-secret”]
[02] 利用HTTP参数污染方式绕过谷歌reCAPTCHA验证机制
[03] JSONP原理优缺点(只能GET不支持POST)
[04] 谷歌(Google): reCaptcha(2.0版本)做网站验证码
[05] 如何使用reCaptcha(2.0版本)来做网站验证码
[06] HttpClient发送get/post请求
[07] 国内使用reCaptcha验证码的完整教程
[08] 精选三种验证码(谷歌recaptcha、极验、Laravel的验证码库gregwar/captcha)

微信扫一扫关注公众号

点击链接加入群聊

https://jq.qq.com/?_wv=1027&k=5eVEhfN
软件测试学习交流QQ群号:511619105

使用reCAPTCHA实现验证码相关推荐

  1. Burpsuite插件 reCAPTCHA识别验证码

    0x00 brute force 希望不带pj就不会被和谐... burpsuite都用的好久了,这个intruder模块各种玩法都玩过了,比较单跑密码类的,用户/密码一起跑的,甚至加上token后利 ...

  2. ReCaptcha——基于验证码的数据挖掘

    验证码发展历史 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apar ...

  3. 验证码识别Burp reCAPTCHA插件使用

    介绍 Burp的reCAPTCHA也可用来识别验证码,github地址:https://github.com/bit4woo/reCAPTCHA,下载相应的jar包添加到burp中,位置在extend ...

  4. reCAPTCHA验证码

    gooreplacer实现reCAPTCHA 谷歌验证码无法显示,加载不成功,真让人苦恼.本文介绍的方法可以解决此问题. 1.什么是 gooreplacer ? 2.浏览器如何使用? 实现的方式如图所 ...

  5. 【技术开发】谷歌验证码 ReCaptcha 破解教程,简单方便从零开始。

    本文章转载于:静觅 » [技术开发]谷歌验证码 ReCaptcha 破解教程,简单方便从零开始. 很久没有做爬虫破解类相关的分享了,之前交流群里有朋友提问谷歌系的reCAPTCHA V2 验证码怎么破 ...

  6. 谷歌reCaptcha验证码服务被攻破事件回顾

    顶象按:reCaptcha就像其名字一样,彰显着谷歌重新定义验证码服务的雄心壮志.不过世界上没有不透风的墙,强大如谷歌如不进步则只能后退.本文介绍了谷歌reCaptcha验证码服务中"音频验 ...

  7. 验证码研究入门必读(验证码是什么,有什么用,分类,设计,破解,未来发展)

           和实验室师姐们共同完成了一篇关于验证码的英文综述,在写综述的过程中看了很多验证码方面的论文,在本博客中我将以偏科普的方式介绍一下验证码,希望能够使对该领域有兴趣的同学对于验证码有进一步的 ...

  8. 用Python 爬虫,如何破解谷歌验证码?

    ReCAPTCHA 介绍 可能大家还没听说过什么是 ReCAPTCHA,可能由于某些原因,这个验证码在国内出现不多,不过想必大家应该多多少少见过或用过.它长这个样子: 这时候,只要我们点击最前面的复选 ...

  9. 我又找到了一个破解谷歌验证码的新方案!

    这是「进击的Coder」的第 452 篇技术分享 作者:崔庆才 之前我曾经写过一篇文章说 Google ReCAPTCHA 验证码的绕过方法,当时介绍的是用 2Captcha,然而有些朋友跟我反映说 ...

最新文章

  1. 2021年大数据Hive(四):Hive查询语法
  2. mysqlevent每天,附答案
  3. ASP.NET-get与post模式的区别
  4. centos7.0 php-fpm 安装ImageMagic php扩展imagick
  5. oracle创建用户名了,oracle创建用户名
  6. C++ 递归函数返回值理解
  7. timespan怎么比较大小_万能小哥丨厨房墙砖哪种好?厨房墙砖怎么挑选?
  8. (转)如何检查系统是否支持Zend Optimizer
  9. GitHub上最火的40个Android开源项目(二)
  10. python实习生面试题_【实习】暑期实习之python笔试题(一)
  11. html鼠标自动向下滑动,win10电脑中鼠标自动向下或向上滚动怎么解决
  12. CentOS 8使用 Kickstart配置 UEFI PXE 启动
  13. 京瓷打印机m5521cdn_京瓷m5521cdn驱动
  14. Win10自带超级截屏利器
  15. html a4纸的像素,打印常识:A4纸张在显示器上应该要多少像素?
  16. 软件有计算机id如何生成注册号码,苹果账号注册方法:如何申请苹果id账号
  17. iOS 设备的屏幕尺寸、分辨率及其屏幕边长比例详细情况
  18. unity 回合制_用Unity E3 Goodness制成
  19. 如何消除文法二义性、如何判断二义文法—编译原理
  20. 安装Sql Server:以前的某个安装需要重新引导计算机以便使其更改生效。若要继续,请重启计算机,然后再次运行安装程序。

热门文章

  1. MFC进度条学习笔记
  2. 疯壳出品-“鸿蒙OS”海思HI3518EV300开发快速入门
  3. 经历了磨骨手术的恢复期间护肤好物分享!
  4. 绿盟SecXOps安全智能分析技术白皮书
  5. 实例二:上海房屋2017年成交信息分析
  6. 《松鼠》电化教学教案
  7. 赛门铁克警告Switch模拟器下载链接实为垃圾站点
  8. kafka 解决大消息发送和接收报错问题
  9. 课程向:深度学习与人类语言处理 ——李宏毅,2020 (P17) 任务精简
  10. [转]DM硬盘低格使用图解