一. 重放攻击概述

百科对重放攻击的描述:https://zh.wikipedia.org/wiki/%E9%87%8D%E6%94%BE%E6%94%BB%E5%87%BB

简而言之,重放攻击的产生是由于安全信息被攻击者截取,用于欺骗服务器。
而在REST风格的软件架构中,如果仅仅使用HTTP协议,请求数据很容易被网络抓包截取,因此在API层面必须考虑防止重放攻击的设计。

二. 防止重放攻击实践

在工程实践中,可以通过时间戳,请求序列号等方式在一定程度上防止大规模的重放攻击。
实现方式不同,效率和难易程度上略有差异,需要根据业务系统实际需求选择合适的方式。

1. 使用时间戳方式
在请求参数中添加时间戳参数,服务器端首先验证时间戳timestamp是否有效,比如是服务器时间戳5分钟之前的请求视为无效;
优点:实现简单
缺点:需要客户端和服务器时钟同步,存在重放攻击时间窗口。

2. 使用请求序列号方式
虽然使用时间戳方式可以在一定程度上控制重放攻击,但是存在时间限制。在指定时间窗口下,任然不可避免会受到攻击。
服务器端和客户端约定一个序列号生成算法(保证全局唯一性),客户端每次请求时都需要携带请求序列号。
服务器端接到请求时,先验证序列号是否合法,不合法直接拒绝。否则查看缓存中是否已经存在过该序列号,若已经存在,表明该请求已经被处理,不允许再次调用。
本次处理完毕,将请求序列号缓存。
这样可以保证一个序列号对应的请求只会被处理一次,相对比较安全地杜绝了重放攻击。
优点:不需要客户端和服务器时钟同步,每个请求只允许被处理一次,杜绝重放攻击。
缺点:实现相对复杂,客户端序列号生成算法存在被破解的风险。

3. 总结
涉及到安全问题,再怎么强调都不为过。
安全防护也不是单一的,需要多层次的检测。如:除了在应用层进行保护,常常还会在外层部署安全网关。
结合实际的业务需求,选择合理的安全实现机制即可。

【参考】
http://yuanhuan.blog.51cto.com/3367116/1441298 API重放攻击的防御策略分析
http://cn.soulmachine.me/2014-01-24-cluster-time-sync-using-ntp/ 集群时间同步--架设内网NTP服务器
http://andylhz2009.blog.51cto.com/728703/946380 内网外网服务器时间同步解决方案
http://51write.github.io/2014/04/03/ntp/ 如何实现多台机器(系统)时间的同步

细说REST API安全之防止重放攻击的更多相关文章

  1. 细说REST API安全之概述

    目前许多前后端应用都采取REST架构风格,前端应用和后端服务通过API进行数据交换.通过REST API在网络中进行数据交换时很容易被网络抓包,然后进行恶意批量调用,最终导致后端服务不堪负重而影响正常 ...

  2. API设计中防重放攻击

    HTTPS数据加密是否可以防止重放攻击? 否,加密可以有效防止明文数据被监听,但是却防止不了重放攻击. 防重放机制 我们在设计接口的时候,最怕一个接口被用户截取用于重放攻击.重放攻击是什么呢?就是把你 ...

  3. 细说 Web API参数绑定和模型绑定

    今天跟大家分享下在Asp.NET Web API中Controller是如何解析从客户端传递过来的数据,然后赋值给Controller的参数的,也就是参数绑定和模型绑定. Web API参数绑定就是简 ...

  4. 细说REST API安全之防止数据篡改

    通常可以使用MD5或SHA-1对API参数进行签名,在服务器端通过校验签名结果来验证数据是否被修改. 举个例子:添加用户 地址:http://192.168.0.10/v1/user/add?sign ...

  5. 细说REST API安全之认证授权

    认证授权包含2个方面:(1)访问某个资源时必须携带用户身份信息,如:用户登录时返回用户access_token,访问资源时携带该参数.(2)检查用户是否具备访问当前资源(url或数据)的权限:访问资源 ...

  6. 细说REST API

    1. REST概述 REST(英文:Representational State Transfer,又称具象状态传输)是Roy Thomas Fielding博士于2000年在他的博士论文中提出来的一 ...

  7. 细说RESTFul API之版本管理

    目录 接口实现版本管理的意义 如何实现接口的版本管理 项目实战 接口实现版本管理的意义 API版本管理的重要性不言而喻,对于API的设计者和使用者而言,版本管理都有着非常重要的意义. 首先,对于API ...

  8. 细说RESTful API之文档管理

    目录 API文档格式 文档管理方式 基于注解实现,代码和文档在一起 Swagger Api2Doc 基于API测试工具生成 Postman rest-client 独立编写文档 RAP DOCleve ...

  9. 细说RESTful API之幂等性

    目录 接口幂等性的含义 接口符合幂等性有什么用处 HTTP方法的幂等性与安全性 如何设计符合幂等性的接口 写在最后 接口幂等性的含义 幂等性原本是数学中的含义,表达式的是N次变换与1次变换的结果相同. ...

随机推荐

  1. <数据结构基础学习>(一)数组

    一.数组基础 1.数组,即把数据码成一排存放. 数组优点:快速查询. 数组最好应用于“索引有语意”的情况,但并非所有有语意的索引都适用于数组,数组也可以处理“索引没有语意”的情况. 2.增.删.改.查 ...

  2. 树状数组入门 hdu1541 Stars

    树状数组 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有元素之和,但是每次 ...

  3. Python中生成器generator和迭代器Iterator的使用方法

    一.生成器 1. 生成器的定义 把所需要值得计算方法储存起来,不会先直接生成数值,而是等到什么时候使用什么时候生成,每次生成一个,减少计算机占用内存空间 2. 生成器的创建方式 第一种只要把一个列表生 ...

  4. 一张图看懂JVM

    https://mp.weixin.qq.com/s?__biz=MzAxNjk4ODE4OQ==&mid=2247484432&idx=1&sn=381c98c49ffb81 ...

  5. js jquery 数组的合并 对象的合并

    转载自:http://www.cnblogs.com/xingxiangyi/p/6416468.html 1 数组合并 1.1 concat 方法 1 2 3 4 var a=[1,2,3],b=[ ...

  6. A1014. Waiting in Line

    Suppose a bank has N windows open for service. There is a yellow line in front of the windows which ...

  7. jquery基本语法(一)

    https://www.cnblogs.com/haiyan123/p/7657151.html 一.jQuery基础1.为什么要用jquery?    写起来简单,省事,开发效率高,兼容性好2.什么 ...

  8. margin纵向重叠

    速记: 如p的纵向 margin 是 16px,那么两个之间纵向的距离是多少?-- 按常理来说应该是 16 + 16 = 32px,但是答案仍然是 16px. 因为纵向的 margin 是会重叠的,如 ...

  9. django跨域请求问题

    一 同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之 ...

  10. unsigned 变量名:n

    在结构体内定义位,节省空间 /* * size是字节数 * addr是打印的起始地址 */ static void printb(void * addr,size_t size){ ;i<siz ...