短信炸弹攻击

  • 一、前置知识
  • 二、修复方案
  • 三、代码参考

一、前置知识

短信炸弹攻击,就是通过把发送短信验证码的报文截获后进行重放造成的攻击。
威胁描述:
如果短信炸弹攻击成功,攻击者可以向该手机号一直不停的发送短信,不但因短信过多发送造成经济损失,甚至会使短信系统崩溃,无法正常提供服务。
涉及功能点:
任何涉及短信验证码发送的功能点,如用户注册、登录、转账等功能。

二、修复方案

  1. 前端控制,通过图形验证码的验证,如果验证不通过则不允许发送短信;
  2. 其次为防止类似httpclient工具直接请求没有session的情况,进行session有无判断,如果没有session信息则不允许发送短信;
  3. 除此之外,再从session、ip、手机号、客户号四个方面请求频率和单位时间请求次数两个角度进行限制,防止短信炸弹,具体如下:
    1)session:
    a.同一sessionId两次的请求时间间隔不应小于设定值(建议请求时间间隔为60s);
    b.同一sessionId的单位时间请求次数不应大于设定值(建议10分钟时间内请求次数不能超过8次);
    2)ip:
    同一ip单位时间请求次数不应大于设定值(考虑到局域网问题,建议只限定10分钟时间内请求次数不能超过200次);
    3)手机号:
    a.同一手机号两次的请求时间间隔不应小于设定值(建议请求时间间隔为60s);
    b.同一手机号的单位时间请求次数不应大于设定值(建议10分钟时间内请求次数不能超过5次);
    4)客户号(针对如个网跳转注册直销等已知客户号的场景):
    a.同一客户号两次的请求时间间隔不应小于设定值(建议请求时间间隔为60s);
    b.同一客户号的单位时间请求次数不应大于设定值(建议10分钟时间内请求次数不能超过5次);

三、代码参考

安全开发实例:

  1. 通过session id防护:

    #!javaString sessionId = session.getId();   //判断同一sessionId请求时间间隔是否小于设定间隔,防止恶意攻击
    Long preReqTime4Session = reqTimeMap4Session.get(sessionId);    //上次请求时间
    Long curReqTime4Session = System.currentTimeMillis();   //本次请求时间
    AtomicInteger errorTimes4Session = reqErrorMap4Session.get(sessionId); //频繁调用累计次数
    if(preReqTime4Session!=null) {//频率校验if(curReqTime4Session-preReqTime4Session < refuseInterval) {log.error("session_attack: " + sessionId + "===curReqTime-preReqTime < refuseInterval==");isError = true;} else {//总次数校验if(errorTimes4Session != null && errorTimes4Session.get() >= sessionTimes) {log.error("session_attack: " + sessionId + "===errorTimes==" + errorTimes4Session);isError = true;}}
    } else {if(errorTimes4Session != null) {reqErrorMap4Session.remove(sessionId);}
    }
    
  2. 通过IP防护:

    #!javaString ipAddress = getIp(context);   //判断同一IP请求时间间隔是否小于设定间隔,防止恶意攻击
    Long preReqTime = reqTimeMap.get(ipAddress);    //上次请求时间
    Long curReqTime = System.currentTimeMillis();   //本次请求时间
    AtomicInteger errorTimes = reqErrorMap.get(ipAddress); //频繁调用累计次数
    if(preReqTime!=null) {//次数校验if(errorTimes != null && errorTimes.get() >= ipTimes) {log.error("ip_attack: " + ipAddress + "===errorTimes==" + errorTimes);isError = true;}
    } else {if(errorTimes != null) {reqErrorMap.remove(ipAddress);}
    }
    
  3. 通过手机号防护:

    #!javaLong preReqTime4Phone = reqTimeMap4Phone.get(mobilePhone);    //上次请求时间
    Long curReqTime4Phone = System.currentTimeMillis();   //本次请求时间
    AtomicInteger errorTimes4Phone = reqErrorMap4Phone.get(mobilePhone); //频繁调用累计次数
    if(preReqTime4Phone!=null) {//频率校验if(curReqTime4Phone-preReqTime4Phone < refuseInterval) {log.error("phone_attack: " + mobilePhone + "===curReqTime-preReqTime < refuseInterval==");isError = true;} else {//次数校验if(errorTimes4Phone != null && errorTimes4Phone.get() >= mobileTimes) {log.error("phone_attack: " + mobilePhone + "===errorTimes==" + errorTimes4Phone);isError = true;}}
    } else {if(errorTimes4Phone != null) {reqErrorMap4Phone.remove(mobilePhone);}
    }
    
  4. 通过客户号防护:

    #!javaLong preReqTime4CifNo = reqTimeMap4CifNo.get(cifNo4TokenImg);    //上次请求时间
    Long curReqTime4CifNo = System.currentTimeMillis();   //本次请求时间
    AtomicInteger errorTimes4CifNo = reqErrorMap4CifNo.get(cifNo4TokenImg); //频繁调用累计次数
    if(preReqTime4CifNo!=null) {//频率校验if(curReqTime4CifNo-preReqTime4CifNo < refuseInterval) {log.error("CifNo_attack: " + cifNo4TokenImg + "===curReqTime-preReqTime < refuseInterval==");isError = true;} else {//次数校验if(errorTimes4CifNo != null && errorTimes4CifNo.get() >= cifNoTimes) {log.error("CifNo_attack: " + cifNo4TokenImg + "===errorTimes==" + errorTimes4CifNo);isError = true;}}
    } else {if(errorTimes4CifNo != null) {reqErrorMap4CifNo.remove(cifNo4TokenImg);}
    }
    

关注公众号,一起分享实用安全技术,关注安全最新事件,记录工作常见问题,吐槽生活真心操蛋。

漏洞解决方案-短信炸弹攻击相关推荐

  1. 【网络安全】——逻辑漏洞之短信轰炸漏洞

    作者名:Demo不是emo  主页面链接:主页传送门 创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷 座右铭:不要让时代的悲哀 ...

  2. 短信验证码安全常见逻辑漏洞

    短信验证码安全常见逻辑漏洞 声明:此文转自http://www.lx598.com/hangyedongtai/978.html (短信验证码安全常见漏洞) 短信验证码常被用于网站用户注册.账户安全登 ...

  3. 短信验证码常见漏洞总结

    使用短信验证码验证身份已经是很普遍的了,注册和忘记密码时最为常见.但是在实际应用中,很多产品的短信验证接口存在诸多漏洞,很多人在开发中也是没有注意到这些问题,因此呢给企业和个人造成不必要的损失.接下来 ...

  4. 请给你的短信验证码接口加上SSL双向验证

    序言 去年年底闲来几天,有位同事专门在网上找一些注册型的app和网站,研究其短信接口是否安全,半天下来找到30来家,一些短信接口由于分析难度原因,没有继续深入,但差不多挖掘到20来个,可以肆意被调用, ...

  5. android 360短信拦截短信验证码,莫名收到短信验证码?360借条安全专家提醒小心新骗局...

    日常生活中,许多人在注册.登陆APP时往往都会选用短信验证码的方式来进行,这样不仅方便,也可以避免因为账号过多而遗忘登陆密码.然而,这样的方式却也成为不法分子眼中的漏洞,围绕短信验证码来展开的电信诈骗 ...

  6. 帮我推荐一个靠谱的106短信群发平台?

    * 接口类型:触发短信接口,支持发送验证码短信.订单通知短信等.  * 账户注册:请通过该地址开通账户 http://user.ihuyi.com/?exClaO * 注意事项: *(1)调试期间,请 ...

  7. 短信业务 防恶意攻击解决方案

    一.方案概述 短信验证码接口被恶意攻击,不仅会会造成大额的短信服务费用,更会对用户造成骚扰,引起投诉,降低公司形象. 二.系统涉及短信业务场景 略. 三.恶意攻击的途径 由于裸露短信发送接口的漏洞,恶 ...

  8. 阿里云短信验证解决方案(java版)(redis存储)

    阿里云短信验证解决方案(java版)(redis存储) 参考文章: (1)阿里云短信验证解决方案(java版)(redis存储) (2)https://www.cnblogs.com/Amos-Tur ...

  9. Sery送的书与网站短信解决方案

    今天Sery(http://sery.blog.51cto.com/)在qq上说要送我一本他刚写的书<互联网运营智慧>,因为里面引用了我写的一段程序. #!/usr/bin/perl -w ...

  10. 惊天后续 | 不仅可看照片和短信, 利用 iOS 漏洞无需密码还能打电话、发短信!...

    11月17日,雷锋网发了这个消息后,一石惊起千层浪: 11月16日,外媒 softpedia 上爆出一个惊人的大消息:iOS 中有一个严重的安全漏洞,任何人都可以借助它来绕过 Passcode 的保护 ...

最新文章

  1. 【javascript位置属性】screen对象
  2. [渝粤教育] 西南政法大学 法理学 参考 资料
  3. kotlin 覆盖属性_Kotlin程序| 方法覆盖的示例
  4. RHadoop和CDH整合实例(三)- RHive
  5. 【kaggle入门题一】Titanic: Machine Learning from Disaster
  6. 如何在DevSecOps道路上快速、安全地抵达终点
  7. windows查看端口号占用
  8. 氩焊机器人编程_焊接机器人编程及调试方法
  9. 洛谷2501 BZOJ1801中国象棋题解
  10. onSaveInstanceState()方法问题
  11. JavaScript常用算法 1
  12. 判断数组类型的4种方法
  13. codeblocks解决网络方面错误undefined reference to `inet_ntoa@4'|
  14. Spurious wakeup
  15. CodeForces 379C -- D - New Year Ratings Change
  16. ENVI基本操作之彩色合成
  17. 隐马尔可夫模型(HMM)攻略
  18. 前端文档网站快速生成工具
  19. Python随机车牌;京牌摇号⼩程序
  20. 深入浅出JS—18 手把手实现一个Promise类

热门文章

  1. 解决网页文字不能复制,复制网页文字的方法
  2. 网络没有运行wmi服务器,win7系统中没有wmi服务如何解决_win7没有wmi服务的解决方法...
  3. LM2596电路简析
  4. winrm java客户端_winrm service
  5. 詹姆斯麦迪逊大学计算机专业,詹姆斯麦迪逊大学简介_詹姆斯麦迪逊大学介绍_詹姆斯麦迪逊大学James Madison University (JMU)...
  6. 汽车行业中SOP和PT是什么意思?
  7. java的path的设置路径_java安装path设置
  8. USB数据采集卡,Labjack U6、T7 采集卡 VB、C++ 编程范例
  9. Windows 运行中的程序的图标在任务栏显示不正常\图标变白色的解决方法
  10. 将图片排版至docx文档中