文档章节

聊聊API的防重放机制

ZYallers
 ZYallers
发布于 2017/07/25 15:23
字数 733
阅读 6
收藏 0
点赞 0
评论 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
重放攻击(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
Api接口加密策略

接口安全要求: 1.防伪装攻击(案例:在公共网络环境中,第三方 有意或恶意 的调用我们的接口) 2.防篡改攻击(案例:在公共网络环境中,请求头/查询字符串/内容 在传输过程被修改) 3.防重放...

2017/12/18
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
Java开发手册(五):安全规约与单元测试

一、安全规约 1. 操作权限 隶属于用户个人的页面或者功能必须进行权限控制校验。防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信 内容、修改他人的订单。 2....

思与学
2017/11/07
0
0
MySQL · 引擎特性 · 从节点可更新机制

背景 主从集群,指由一个主数据库实例和多个从数据库实例组成,其中主数据库实例提供读写功能支持,而从数据库不提供对外服务或只提供只读功能支持,但也有从数据库提供读写功能支持,下面就...

阿里云RDS-数据库内核组
2017/06/04
0
0
Spark Streaming源码解读之Executor容错安全性

前文可知,streaming 会持续不断的接收数据,同时不断的生成job,不断的提交job给集群运行。 而安全性有两部分,数据的容错和运行时计算的容错。 众所周知,Streaming是运行在Spark Core之上...

柯里昂
2016/05/22
38
0
面向机器人的通讯机制安全研究与改进

  摘要   射频技术当前发展速度迅猛,在目前的无线通信中占据主导地位。作为射频技术的主要分支之一,点对点射频通讯技术也有着十分广泛的应用,在智能机器人的通讯领域具有重要的地位。...

中国机器人
03/22
0
0
Baigo SSO v1.2 发布,单点登录系统

单点登录系统 Baigo SSO v1.2 发布了,更新如下: -------------------v1.2------------------- 2016-09-06 示例代码位于 ./example 目录,不再提供 sdk 2016-09-01 改善判断是否为空的函数 ...

baigoStudio
2016/09/06
2.8K
5

没有更多内容

加载失败,请刷新页面

加载更多

下一页

实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
0
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
昨天
1
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部