tnblog
首页
视频
资源
登录

腾讯防水墙

13508人阅读 2019/4/27 16:07 总访问:144523 评论:10 收藏:0 手机
分类: C#

使用腾讯防水墙接入滑动验证效果,防止恶意、可疑用户登陆


接入代码很简单,10分钟就能搞定

首先要去腾讯防水墙注册账号,登陆后创建验证 官方地址:https://007.qq.com

创建之后点击到【快速接入】可以查看到appid和秘钥

嗯~准备工作已完成,下面就是代码进行客户端接入和服务器接入了

一、客户端接入:

    客户端接入即前端引入html和js代码(非常简单)

    1、引入js 

  1. <script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>

    2、验证按钮(这个一般就是你的登陆按钮,按照腾讯固定格式)

  1. <button type="button" class="pn" id="TencentCaptcha" data-appid="2096471113" data-cbfn="callback">进入后台系统</button>

    为了后台传值验证我这里加了2个隐藏的input用于存储回调的票据和随机字符串

  1. <!--防水墙票据、字符串 begin-->
  2. <input type="hidden" value="" name="ticket" id="ticket">
  3. <input type="hidden" value="" name="randstr" id="randstr">
  4. <!--防水墙票据、字符串 end-->

 3、回调函数

  1.     <script>
  2.         window.callback = function(res{
  3.             if (res.ret === 1) {//验证失败
  4.                     alert("未通过验证,请重新验证");
  5.                 return;
  6.             }
  7.             if (res.ret === 0) {//验证成功
  8.                 //这里就是给上面的2个标签赋值
  9.                 $('#ticket').attr('value', res.ticket);//回调的票据
  10.                 $('#randstr').attr('value', res.randstr);//回调的字符串
  11.                 PreventLogin();
  12.             }
  13.         }
  14.     </script>

至此客户端接入就已经完成了,现在就可以看到效果了:

二、服务器接入:

    在验证完成后,客户端收到获得一个验证票据(ticket)。将票据上传至服务器,并发送GET请求到下方接口可以校验验证码的票据,判断当次验证是否成功。

    后台代码写在登陆之前:

    URL: https://ssl.captcha.qq.com/ticket/verify

    参数:


字段名描述
aid (必填)2096471113
AppSecretKey (必填)0CB7wV-e7lJXDqYEdA1koXQ**
Ticket (必填)验证码客户端验证回调的票据
Randstr (必填)验证码客户端验证回调的随机串
UserIP (必填)提交验证的用户的IP地址(eg: 10.127.10.2)

后台代码:

  1. /// <summary>
  2. /// 登录验证
  3. /// </summary>
  4. /// <param name="username">用户名</param>
  5. /// <param name="password">密码</param>
  6. /// <param name="verifycode">验证码</param>
  7. /// <param name="autologin">下次自动登录</param>
  8. /// <param name="ticket">客户端验证回调的票据</param>
  9. /// <param name="randstr">客户端验证回调的随机串</param>
  10. /// <returns></returns>
  11. [HttpPost]
  12. public ActionResult CheckLogin(string username, string password, string verifycode, int autologin,string ticket,string randstr)
  13. {
  14.     AdminLoginBLL bll = new AdminLoginBLL();
  15.     try
  16.     {
  17. //有了防水墙验证这个就可以不要了
  18. #region 验证码验证
  19. if (autologin == 0)
  20. {
  21.          string oldcode = DESEncrypt.Decrypt(AdminCookieContext.getcookie());
  22.     if (verifycode != oldcode)
  23.     {
  24.         throw new Exception("验证码错误,请重新输入");
  25.     }
  26. }
  27. #endregion
  28. #region 防水墙验证(Get请求)
  29. string url = "https://ssl.captcha.qq.com/ticket/verify?";//请求地址
  30. //参数
  31. string aid = "********";//appid
  32. string AppSecretKey = "0CB7wV-******dA1koXQ**";//App Secret Key
  33. string UserIp = WebHelper.Ip;//提交验证的用户的IP地址
  34. string parameters = string.Format("aid={0}&AppSecretKey={1}&Ticket={2}&Randstr={3}&UserIP={4}", aid, AppSecretKey, ticket, randstr, UserIp);
  35. url = url + parameters;
  36. //http get请求
  37. string resulttoken = WebHelper.HttpWebRequest(url);
  38. //验证结果
  39. TencentCaptchaResultData tencentCaptcha = JsonHelper.DeserializeJsonToObject<TencentCaptchaResultData>(resulttoken);
  40. //1:表示验证通过 0:失败
  41. if (tencentCaptcha.response != 1)//失败则抛出异常,反之就进行后面的用户密码验证,判定是否等成功
  42. {
  43.     throw new Exception("防水墙验证失败!");
  44. }
  45. #endregion
  46. #region 内部账户验证
  47. string pwd = DESEncrypt.Encrypt(MD5Util.GetMD5_32(password));
  48. GetDataResult result = bll.CheckLogin(username, password);
  49. if (result.Return_ID == 0)
  50. {
  51.     return Success("登录成功。");
  52. }
  53. else
  54. {
  55.     throw new Exception(result.Return_Mess);
  56. }
  57. #endregion
  58.     }
  59.     catch (Exception ex)
  60.     {
  61.         WebHelper.RemoveCookie("nineteam_autologin");                  //清除自动登录
  62.         return Error(ex.Message);
  63.     }
  64. }

    TencentCaptchaResultData 是我对返回验证结果的封装:

    到这服务器接入也完成了。嗯~我也是今天才试了下这个,还挺方便,高大上,主要是快!10分钟整一个登陆验证。


评价

饰心

2019/4/27 16:22:15

@剑轩,快去给tnblog弄一个[偷笑] 

剑轩:@饰心收到!

2019/4/27 17:49:46 回复

幽梦紫曦:@饰心你这个有几个参数我不明白是什么意思呀

2019/12/16 17:46:35 回复

幽梦紫曦

2019/9/30 10:37:55

学长你有下载好的js文件吗


饰心:@幽梦紫曦下载的js?这个要直接复制js的地址扔到浏览器上就显示出源代码了,然后另存为

2019/11/18 14:24:18 回复

幽梦紫曦:@饰心你可以教我下怎么使用这个吗

2019/12/10 15:58:00 回复

幽梦紫曦:@饰心或者留个联系方式呗

2019/12/10 16:03:52 回复

幽梦紫曦

2020/5/22 16:27:23

appid怎么创建

饰心:@幽梦紫曦这个是去腾讯防水墙后台地址创建的应用id,我微信号xz1414682954

2020/5/25 11:18:49 回复

幽梦紫曦:@饰心我看了似乎是aid和AppSecretKey

2020/5/29 15:30:24 回复

Decorating heart
排名
22
文章
14
粉丝
21
评论
27
腾讯防水墙
赖成龙 : 学长你有下载好的js文件吗
使用 JSON WEB TOKEN (jwt) 验证
饰心 : 由于最近换了新的工作环境,还在挖煤中。后续会增加博客更新频率。
腾讯防水墙
饰心 : @剑轩,快去给tnblog弄一个
使用select2实现下拉框中显示图片
剑轩 : 秀啊.....,飞常不错
使用select2实现下拉框中显示图片
饰心 : 嗯~刚好差不多下班
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
我躺在黑暗里用血丝赤红的眼看每一个凌晨的灿红初阳。