一. 重放攻击概述

百科对重放攻击的描述: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. 【CF833E】Caramel Clouds(线段树)

    [CF833E]Caramel Clouds(线段树) 题面 CF 洛谷 题解 首先把区间一段一段分出来,那么只有四种情况. 要么没有被任何一朵云被覆盖,那么直接就会产生这一段的贡献. 要么被一朵云覆 ...

  2. 【转】.MD语法入门

    @2019-02-13 [小记] .MD语法入门

  3. rt-thread之stm32系列BSP制作方法

    @2019-01-24 [小记] bsp制作方法: 官网下载 rt-thread 源码,将路径 bsp/stm32/libraries/templates/ 下的模板文件,Copy至路径 bsp/st ...

  4. mailkit库收发邮件

    mailkit库用于收发邮件.这个库可以替代C#自带的发邮件库 环境  W10 / VS2017CMMT / MailKit version="2.0.3" "net46 ...

  5. PHP函数memory_get_usage获取PHP内存清耗量

    (PHP 4 >= 4.3.2, PHP 5, PHP 7) memory_get_usage — 返回分配给 PHP 的内存量 说明 int memory_get_usage ([ bool ...

  6. 随机总数字里面选取随机数字进行随机排序案例(JAVA实现)

    随机总数字里面选取随机数字进行随机排序案例,案例如下: 代码code: package com.sec; import java.util.Arrays; import java.util.Scann ...

  7. 商品详情页系统的Servlet3异步化实践

    http://jinnianshilongnian.iteye.com/blog/2245925 博客分类: 架构   在京东工作的这一年多时间里,我在整个商品详情页系统(后端数据源)及商品详情页统一 ...

  8. 【LOJ6284】数列分块8

    题目大意:维护一个序列,支持区间染色,查询区间中等于某个颜色的点的个数. 题解:考虑直接用线段树进行维护,维护区间相同颜色值和一个区间颜色是否相同的标记即可. 代码如下 #include <bi ...

  9. latex 导入pdf

    pdflatex \includepdf[addtotoc={1,section,1,something would show in catalog,cc},pages=-,offset=0cm 0. ...

  10. linux服务器上tomcat日志中的中文乱码

    转: 修改tomcat应用日志默认编码格式 前言 今天开发跟我说tomcat日志中的中文不能正常显示,根据以往的经验,我觉得可能跟服务器的编码有关,于是尝试各种方法,但还是没能解决问题. 后来我突然想 ...