这两天比较悠闲,有很多时间可以用来写文章。扯扯淡,哈哈哈今天给大家分享一个纯业务的的东西,也会有代码辅助,但是不多。看名字是不是都觉得很屌哈哈哈哈哈哈哈。
博主是一个标题党。

先给你们上一张小编自己画的图吧。我不知道大家写APi的时候有没有这样的疑惑。。


就是api频繁被恶意调用,有没有这种的,我擦我新写的接口又被爬去了,竟然拼接了参数来不断请求。哎。。。。。


来听小编发生在自己身上的超级恶心的bug

我记得小编在上家公司遇到一个很奇葩的事,我刚写了一个发短信的接口,感觉自己浑身都飘起来了,

感觉功能做出来,各种牛逼,然后呢提测给一个漂亮的小姐姐 诺和下面的这位小姐姐一样漂亮。。

并对我说了一生,大猪蹄子你这个功能没问题可以正常上线。。。
可以上线正式版本,我习以为常的就上线了。
正当我和小姐姐聊天呢,我们Leader拿着个菜刀就过了,小伙子你要逆天啊。。。

我说咋的咋的了,是不是泡你妹子了。我们leader拿着一个账单

你给我哦解释一下,咱们的程序刚上线每一个月,短信费用干了5w多
是不是用户多了,leader说md用户还是那几个我们自己人
然后我看了一下某短信平台嘚消费信息,结果真的发送了这么多验证码。

是不是短信平台出bug了。。。我给老板说得赶紧维权啊

结果给客服小姐姐打电话打了2个小时,最后的结局是我们平台没有bug,一切正常。是你们频繁调用我们接口的。我就怒了,妈的什么破短信平台,垃圾。。。。吞钱啊。。

没办法了,找自身原因吧,我默默打开xsheel 一看日志 我他妈顿时就惊呆了。还在刷验证码
我什么都没有想,就把服务器Tomcat就给关了,结果一个小时损失了几个亿日元。。。。

妈的Leader差点被砍死。。。。。还好我命大。

最后发现了问题所在就是接口没有加认证,被大坏蛋恶意抓取了,然后只要给这个接口传手机,这个接口就开始发短信,我才他们写了一个for循环然后频繁调用我们接口。。。太他妈狠了。。。。。。。

这就是网上流传的短信轰炸机

小编副业写BUG 副业DBUg 哎做一个程序员真累。


今天就给大家分享一个给API接口加认证的方法(只有业务)

我画了一个流程图,先给你们看看~~~~

kingYifan用了20年的画工才花出来的。。。(不喜欢勿喷啊)

来给你们贴代码的时候到了

  /****spring mvc的请求过滤,权限验证*KingYiFan*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String path = request.getServletPath();//走正则表达式 看是否这个接口是否需要认证if(path.matches(Const.NO_INTERCEPTOR_PATH)){//不需要直接放行return true;}Map<String,Object> map = new HashMap<String,Object>();//接受前台的数据 sign是加密的字符串String sign = request.getParameter("sign");//前台的时间戳String timestamp = request.getParameter("timestamp");//用户的凭证,这个根据业务写String token =request.getHeader("token");//判断是否为空 为空直接返回falseif(Tools.notEmpty(sign)&&(Tools.notEmpty(timestamp)&×tamp.length()==13)) {//验证请求超时Long _timestamp = Long.parseLong(timestamp);if (System.currentTimeMillis()/1000 -  _timestamp * 1000 > 60 * 1000) {map = AppUtil.returnResult(map,"fail",Const.PROMPT_TIMEOUT);logger.info("接口访问失败,请求超时,访问路径:----"+path);println(response, map);return false;}//验证签名//String param = path.substring(path.lastIndexOf("/")+1, path.length());boolean signBool = AppUtil.checkSign(token, sign, timestamp);if(!signBool){map = AppUtil.returnResult(map,"fail",Const.PROMPT_WRONGFUL);logger.info("接口访问失败,验签不正确,访问路径:----"+path);println(response, map);return false;}}else {map = AppUtil.returnResult(map,"fail",Const.PROMPT_WRONGFUL);logger.info("接口访问失败,验签不正确,访问路径:----"+path);println(response, map);return false;}logger.info("接口访问成功,访问路径:----"+path); return true;}

对比的工具类(签名)

/*** 检测KEY是否正确* @param paraname  传入参数* @param FKEY        接收的 KEY* @return 为空则返回true,不否则返回false*/public static boolean checkSign(String paraname, String sign,String timestamp){paraname = (null == paraname)? "":paraname;return MD5.md5(paraname+",cnbuilder.cn,"+timestamp).equalsIgnoreCase(sign);}

上面就是一套验签的服务器端流程,有什么不懂就联系我。


鼓励作者写出更好的技术文档,就请我喝一瓶哇哈哈哈哈哈哈哈。。
微信:

支付宝:

感谢一路支持我的人。。。。。
Love me and hold me
QQ:69673804(16年老号)
EMAIL:69673804@qq.com
友链交换
如果有兴趣和本博客交换友链的话,请按照下面的格式在评论区进行评论,我会尽快添加上你的链接。

网站名称:KingYiFan’S Blog
网站地址:http://blog.cnbuilder.cn
网站描述:年少是你未醒的梦话,风华是燃烬的彼岸花。
网站Logo/头像:http://blog.cnbuilder.cn/upload/2018/7/avatar20180720144536200.jpg

如何保证API不被别人恶意调用(彩蛋)相关推荐

  1. 注册时发短信如何防止别人恶意调用短信接口

    1.每个IP 一天至多发送短信10-20条 (多个账号注册 如果断网换ip则失效) 2.每个手机号码至多发送10条 每天至多5条 超过不允许注册 (正常注册5次短信已经完全足够) --由于前2条 无法 ...

  2. 高效、易用、功能强大的 api 管理平台(内附彩蛋)

    前言导读 实际环境的需求可以说是:只有你没想到,没有实现不了的,征对于目前实际开发.测试.生产等环境中,需要用到各类的接口可达几十.甚至上百个,因此,必须需要一个统一管理的工具平台来统一管理这类接口, ...

  3. thinkphp+小程序手机短信验证码(防止恶意调用短信接口)

    thinkphp+小程序手机短信验证码 前言 一.短信轰炸是什么? 二.小程序准备 1.wxml 2.wxss 3.js(使用小程序定时器限制) 三.后台接口(ThinkPHP) 前言 一.短信轰炸是 ...

  4. Android暴露api接口,Android-如何保证API接口数据安全

    Android-如何保证API接口数据安全 Android-如何保证API接口数据安全 前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合.无论是开发原 ...

  5. 如何保证API接口安全?

    一.摘要 在实际的业务开发过程中,我们常常会碰到需要与第三方互联网公司进行技术对接,例如支付宝支付对接.微信支付对接.高德地图查询对接等等服务,如果你是一个创业型互联网,大部分可能都是对接别的公司ap ...

  6. 短信接口被恶意调用,瞬间损失两万,怎么解决?

    1 我们公司的短信接口被恶意调用,瞬间损失两万 前两天的中午像往常一样热,太阳不知疲倦的在天空燃烧,热跑了云彩和鸟儿,马上就要点燃空气和我的脑神经.为我和电脑降温的,是我简陋的书桌上的小电扇,没有它的 ...

  7. 如何保证API接口的安全性

    如何保证API接口的安全性 怎样防伪装攻击 防伪装攻击:即防止接口被其他人调用,此阶段可以理解为比如已经登录了,然后在请求其他接口的时候,通过Token授权机制来判断当前请求是否有效 Token是客户 ...

  8. thinkcmf5调用指定分类的二级_Tengine快速上手系列教程amp;视频:基于Python API的图片分类应用入门丨附彩蛋...

    前言:近期,Tengine团队加班加点,好消息接踵而来,OpenCV 4.3.0发布,OPEN AI LAB AIoT智能开发平台Tengine与OpenCV合作共同加速边缘智能,Tengine再获业 ...

  9. python实现简单的api接口-简单实现Python调用有道API接口(最新的)

    # ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...

最新文章

  1. 机器学习深度学习论文写作工具推荐
  2. Docker入门-构建第一个Java程序
  3. Android 关闭软键盘
  4. Github用户注册流程
  5. SAP Spartacus split view里每个元素宽度的计算方式
  6. PHP解决http和https跨域,php中http与https跨域共享session的解决方法
  7. linux安装g++编译器_Ubuntu Desktop下配置Rosetta安装教程
  8. 单账户登录踢人 php,踢人下线
  9. 【Java】《面向对象程序设计——Java语言》Castle代码修改整理
  10. php 判断下载状态,php下获取http状态的实现代码
  11. python设计模式7-桥接模式
  12. ubuntu中flash中文乱码的问题解决
  13. 如何提取左声道音频_TRS? TRRS? 正式录制前,您确保麦克风的音频线插对了吗?...
  14. qtp 连接mysql_QTP连接MySQL
  15. AspNetPager的使用
  16. 基于51单片机220V交流电流检测系统过流阈值报警方案原理图
  17. U盘容量变小了 -恢复U盘实际容量教程(亲试有效)
  18. Java 哈密顿距离
  19. 左外连接Left-Outer-Join的基于SQL,MapReduce,sparkRDD,sparkDataFrame以及spark SQL的实现案例及对比
  20. 2018千元内的UGP VR一体机开箱评测:ugp vr一体机怎么样真的好吗?

热门文章

  1. [BUUCTF-pwn] wdb_2018_semifinal_pwn3
  2. Greenplum集群部署安装指南
  3. Ubuntu20.04 ROS读取basler相机图像步骤。MATLAB2021b标定basler单目相机
  4. 04 面向对象之:三大特性:继承(已讲),封装,多态。
  5. 炉石胖枫抽到什么刀片服务器准系统整机主板,中速猎天下第一!老将胖枫喜提炉石传说青岛黄金赛大师组冠军...
  6. uos应用_统信 UOS 私有化应用商店解决方案发布,支持应用分发管理
  7. 无人驾驶算法学习(七):基于事件的视觉里程计
  8. java 打印 日历 详细 注解_java 打印日历
  9. C语言除法哪个是整除,c语言整除(c语言整除怎么表示)
  10. php随机调用百度背景图片,如何在网页中调用岁月小筑随机图片API——背景图片...