一、什么是重放攻击?

我们在开发接口的时候通常会考虑接口的安全性,比如说我们通常会要求请求的url携带一个经过算法加密的签名sign到服务端进行验证,如果验证通过,证明请求是合法的。比如以下的url:

http://wokao66.com/in.json?uid=7&sign=xxxxx

其中sign的常用加密算法为MD5MD5算法是一种不可逆算法,也就是说你加密之后就不能解密了。这通常要求通讯双方约定好一个私钥appSecret,这个私钥是约定好的,不能在网络上进行传输。但单单有这个加密是远远不够的,比如说我是一名黑客,我抓包了你当前执行成功的请求信息,我们假设为request-1,既然你都执行成功了,也就是说你的这次请求的所有参数都是合法的,那么作为黑客的我,我就想能不能将你request-1的请求数据再封装成另外一个请求request-2,然后再去请求接口,如果此时系统未作任何处理,那么系统肯定是认为request-2是合法的,肯定还是会放行,但至于业务上成不成功,那么是另外一个问题了,倘若在执行业务前需要进行一个相对耗时的数据库操作,那么大量的request-2,request-3势必会使服务器瘫痪。

酱紫,可能语言难以理解,我画个图先:

首先正常的请求系统会要求校验,当你的合法请求被黑客拦截之后,黑客就会重复地发送该合法请求,从而达到欺骗系统的目的!这种重复利用合法请求进行攻击成为重放。

二、如何防止重放攻击?

重放攻击的原理其实很简单,无非就是系统没有对合法请求进行唯一性校验。什么意思呢?就是说系统要知道你第一次的合法请求request-1不能被重复执行,要保证每次请求的唯一性。那么怎么去防止重放攻击呢?

参考网络上的解决方案,大概有以下两种方式:

  • 1、采用时间戳

这种方式的做法就是,首先我们认为一次HTTP请求从发出到到达服务器的时间是不会超过60s的,当你发送一个请求时必须携带一个时间戳timestamp,假设值为10,当请求到达服务器之后,服务器会取出当前时间,假设为t2=80,很明显t2-timestamp>60s,那么服务器就认为请求不合法。

号外号外,这个时间戳是需要加入MD5加密签名的,不然黑客修改了时间戳t2=20,那不就是白费功夫了。

为什么这样做有效?

首先黑客从抓包到发起请求一般会超过60s,再者我们不需担心黑客修改了时间戳timestamp,因为如果修改了时间戳,那么对应的签名sign也就失效了,因为MD5是不可逆的,你想伪造MD5,必须知道双方约定的密钥appSecret

缺点:

  1. 如果黑客在60s内发起攻击,那么我们就束手无策了。
  • 2、采用时间戳 + 随机数nonce

上面说到时间戳是有缺点的,那么我们加入一个随机数nonce,每次成功请求,服务器会保存当前成功请求的随机数nonce,比如存放在redis和数据库中,当请求再次进到服务器,先验证时间戳是否有效,如果有效,再判断携带的随机数nonce是否在缓存或者数据库中已经存在,如果存在,则认为请求非法。

但你会发现,如果系统请求非常多,这个存放nonce的缓存也好,数据库也好势必会越来越大,那么我们只需要保存服务器当前时间60秒内的nonce值即可。

缺点:

  1. 你得保证随机数nonce绝对唯一
  • 3、基于record的方案

什么是基于record的验证方式呢?就是说我现在不需要随机数,我利用MD5加密的唯一性,采用多维度(多个字段),将每次请求的记录保存到数据库中,每次请求先校验签名记录是否存在,如果存在,则认为请求非法,不存在,则将MD5签名结合其他参数一起保存到数据库中。当然这里也可以结合时间戳只保存60s内的数据。

第三点主要是不考虑采用随机数机制,同时对自己业务可以有不同的扩展,或者说加入业务参数方便运维监控等。

综合上面几种方案,都有缺点,其中一个致命的缺点是服务器的时间和客户端的时间是存在时间差的,当然你也可以通过校验时间戳解决此问题。

谢谢阅读。

Web安全防范-----防止重放攻击相关推荐

  1. Web安全防范--防止重放攻击

    一.什么是重放攻击? 我们在开发接口的时候通常会考虑接口的安全性,比如说我们通常会要求请求的url携带一个经过算法加密的签名sign到服务端进行验证,如果验证通过,证明请求是合法的.比如以下的url: ...

  2. 第三章:zigbee学习笔记之物理层和mac层帧格式分析

    本文原地址:https://blog.csdn.net/tainjau/article/details/81634681 IEEE802.15.4工作组致力于无线个人区域网络(wireless per ...

  3. 打造千万级流量秒杀第十课 Web 安全:如何解决重放攻击和 XSS 注入?

    上一讲,我给你介绍了 KV 存储.虽然用了 KV 存储后,服务整体性能和可用性都得到了提升,但是如果有人恶意捣乱,效果也会大打折扣.举个例子,如果秒杀系统有安全漏洞,导致有1/3 的是利用漏洞发起的恶 ...

  4. 安全是一个系统问题包括服务器安全,信息安全技术题库:信息泄露对于Web服务器的危害在于( )。...

    相关题目与解析 Web错误信息可能泄露服务器型号版本.数据库型号.路径.代码.() 关于Web应用防火墙,Web服务器防范敏感信息泄露的方式不包括() 在网络中信息安全十分重要,下面与Web服务器安全 ...

  5. 闭关修炼(二十五)基础web安全

    不是特别难,主要是积累经验 赶紧学springboot去了,好拖延啊.捂脸 文章目录 表单重复提交 前端解决方法 接口如何防止模拟http请求 使用Filter防止XSS攻击 SQL注入 常见的攻击有 ...

  6. 《Flask Web开发实战:入门、进阶与原理解析》读书笔记

    写在前面 学docker编排,有一个用Flask框架的Demo,感觉挺方便,所以学习下 基于<Flask Web开发实战:入门.进阶与原理解析>做的读书笔记 个人还是比较喜欢看书,看书的话 ...

  7. 2021年上半年软考网络规划师真题解析

    1.为防范国家数据安全风险.维护国家安全.保障公共利益,2021 年7月,中国网络安全审查办公室发布公告,对"滴滴出行"."运满满" ."货车帮&qu ...

  8. java 修改 referer_看好你的门-客户端传数据-用java修改referer

    1.简单说明 Referer.origin用来表明,浏览器向WEB服务器表明自己来自哪里. 但是就它本身而言,并非完全安全. 写一个例子,可以任意修改http信息头中的referer.origin 2 ...

  9. 阿里腾讯前端一面小结

    阿里一面 1.         自我介绍.说完3个项目后插入 2.         用户体验 项目逻辑 项目优势在哪里? 3.         项目一三中的难点(后台管理系统) 插件的使用及扩展.动态 ...

最新文章

  1. t检验自由度的意义_t检验的效应量
  2. No entry found for dependency in Cartfile.
  3. 简述安装linux至少需要哪两个分区?还有哪些常用分区?,Linux试题
  4. linux线程池资料
  5. ASP.NET中利用ashx实现图片防盗链
  6. 学习写DSHOW 框架下的FILTER 之一
  7. 拓端tecdat|R语言高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
  8. FreeSwitch +fusionpbx安装和基本使用
  9. 网格员试题计算机,网格员考试 计算机基础知识试题库完整.doc
  10. UI实战教程之切图标注篇(UI必备)
  11. lunix remount u盘_使用e2fsck修复损坏的Linux磁盘|Read only|LVM|EXT4-FS
  12. ProcessingJS介绍
  13. Python软件的下载安装教程
  14. xca自签发证书解决chrome浏览器证书不可信问题记录
  15. 一款不愿透露姓名的绿色小说软件
  16. 浅谈 BI 与数据分析的可视化
  17. IDS入侵检测系统与开源IDS-snort的安装与编写规则
  18. SAP系统中信用控制功能详解
  19. pandas: groupby()分组求平均值
  20. laravel 8控制器获取当前url

热门文章

  1. 通达oa与php环境冲突,迁移通达OA过程中所遇到的数据库问题
  2. 安全专家在多家厂商的SOHO路由器和NAS设备中发现了125个新漏洞
  3. 交叉编译OpenCV3.4.1报错
  4. 图的最小生成树算法实现(Prim + Kruskal)
  5. qemu内存模型(3) 内存布局初始化
  6. 百度虚拟服务器上传,百度云空间虚拟主机502 Bad Gateway错误
  7. [日程管理][Android]91todo日程任务管理
  8. android 远程控制 盒子,真正远程控制你的盒子(局域网和互联网)
  9. 条码打印软件如何使用Excel表批量打印条码标签
  10. Android Camera相机开发示例、Android 开发板 USB摄像头采集、定期拍照、定时拍照,安卓调用摄像头拍照、Android摄像头预览、监控,USB摄像头开发、摄像头监控代码