文档章节

聊聊API的防重放机制

ZYallers
 ZYallers
发布于 2017/07/25 15:23
字数 733
阅读 8
收藏 0

聊聊API的防重放机制

image

我们在设计接口的时候,最怕一个接口被用户截取用于重放攻击。重放攻击是什么呢?就是把你的请求原封不动地再发送一次,两次...n次,一般正常的请求都会通过验证进入到正常逻辑中,如果这个正常逻辑是插入数据库操作,那么一旦插入数据库的语句写的不好,就有可能出现多条重复的数据。一旦是比较慢的查询操作,就可能导致数据库堵住等情况。

这里就有一种防重放的机制来做请求验证。

timestamp+nonce

我们常用的防止重放的机制是使用timestamp和nonce来做的重放机制。

timestamp用来表示请求的当前时间戳,这个时间戳当然要和服务器时间戳进行校正过的。我们预期正常请求带的timestamp参数会是不同的(预期是正常的人每秒至多只会做一个操作)。每个请求带的时间戳不能和当前时间超过一定规定的时间。比如60s。这样,这个请求即使被截取了,你也只能在60s内进行重放攻击。过期失效。

但是这样也是不够的,还有给攻击者60s的时间。所以我们就需要使用一个nonce,随机数。

nonce是由客户端根据足够随机的情况生成的,比如 md5(timestamp+rand(0, 1000)); 它就有一个要求,正常情况下,在短时间内(比如60s)连续生成两个相同nonce的情况几乎为0。

服务端

服务端第一次在接收到这个nonce的时候做下面行为:

  1. 去redis中查找是否有key为nonce:{nonce}的string
  2. 如果没有,则创建这个key,把这个key失效的时间和验证timestamp失效的时间一致,比如是60s。
  3. 如果有,说明这个key在60s内已经被使用了,那么这个请求就可以判断为重放请求。

示例

那么比如,下面这个请求:

http://a.com?uid=123&timestamp=1480556543&nonce=43f34f33&sign=80b886d71449cb33355d017893720666

这个请求中国的uid是我们真正需要传递的有意义的参数timestamp,nonce,sign都是为了签名和防重放使用。

timestamp是发送接口的时间,nonce是随机串,sign是对uid,timestamp,nonce(对于一些rest风格的api,我建议也把url放入sign签名)。签名的方法可以是md5({秘要}key1=val1&key2=val2&key3=val3...)

服务端接到这个请求:

  1. 先验证sign签名是否合理,证明请求参数没有被中途篡改
  2. 再验证timestamp是否过期,证明请求是在最近60s被发出的
  3. 最后验证nonce是否已经有了,证明这个请求不是60s内的重放请求

本文转载自:www.cnblogs.com/yjf512/p/6590890.html

共有 人打赏支持
ZYallers
粉丝 1
博文 59
码字总数 19100
作品 0
佛山
程序员
私信 提问
如何防止别人抓包重放攻击

攻击者把这个攻击包反复发给服务器, 如果登录包内容不变, 那么该用户可以会一直登不上了。对着这种坑定是登录包要引入扰动因素, 我这里有个要求, 我希望一个包就实现, 不是反复发包。 ...

凯文加内特
2016/04/08
653
0
安全协议——Internet安全协议(Internet Protocol Security,IPSec)工作原理

IPSec的使用是建立在安全关联的基础上的,所以在讲IPSec之前要先了解一下安全关联,然后再详细讲述IPSec的工作过程。 一、安全关联 安全关联的定义:为了实现数据发送者至接收者的安全传输,...

0rambot
2018/12/16
0
0
重放攻击(reply attacks)

重放攻击(Replay Attacks) 重放攻击(Replay Attacks) 1.什么是重放攻击 顾名思义,重复的会话请求就是重放攻击。 可能是因为用户重复发起请求,也可能是因为请求被攻击者获取,然后重新发...

一曲东风
2017/07/11
0
0
基于hmac的rest api鉴权处理

一:常见的HTTP鉴权协议 REST表述性状态转移(Representational State Transfer),是基于HTTP的web服务设计风格,一个 RESTFUL API 是无状态的,这意味着认证请求应当不能依赖于cookie或ses...

wangjie2016
2017/05/19
0
0
Web安全实践(14)嗅探,arp欺骗,会话劫持与重放攻击(下)

作者:玄魂 本系列导航http://www.cnblogs.com/xuanhun/archive/2008/10/25/1319523.html 安全技术区http://space.cnblogs.com/group/group_detail.aspx?gid=100566 前言 距离上篇文章已经很......

吞吞吐吐的
2017/10/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

独家解密:阿里超大规模数据中心性能分析

郭健美,阿里巴巴高级技术专家,目前主要从事数据中心的性能分析和软硬件结合的性能优化。CCF 系统软件专委和软件工程专委的委员。曾主持国家自然科学基金面上项目、入选上海市浦江人才计划A...

阿里云云栖社区
23分钟前
2
0
独家解密:阿里大规模数据中心性能分析

郭健美,阿里巴巴高级技术专家,目前主要从事数据中心的性能分析和软硬件结合的性能优化。CCF 系统软件专委和软件工程专委的委员。曾主持国家自然科学基金面上项目、入选上海市浦江人才计划A...

zhaowei121
26分钟前
1
0
mongodb系列~配置文件的优化与处理

mongodb系列~配置文件的优化与处理 一 简介:讲讲如何优化mongo配置文件 二 常规参数 port= //端口 fork=true//守护进程方式启动mongo logpath=shard.log //mongo日志存放路径 journal= tru...

linjin200
28分钟前
1
0
同一台 windows10 设备,安装两个不同版本的mysql

两个mysql 的my.ini文件需要 配置不同的端口。 [mysqld]# 设置3307端口port=3307# 设置mysql的安装目录basedir=F:\\mysql-5.7.24-winx64 # 切记此处一定要用双斜杠\\,单斜杠我这里...

无敌小学僧
28分钟前
2
0
条码插件TBarCode Office系列教程一(Word Add-In篇)

TBarCode Office是一款适用于Microsoft Word 2007、2010和2013的条码插件,通过此插件可以轻松的在您的文档中嵌入代码。此系列教程旨在介绍TBarCode Office的常见问题及解答,帮助大家学习使...

ymy_666666
29分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部