如果是对内的rest api 服务, 可以使用 防火墙加 出站入站规则来处理
如果是对外的rest api服务, 可以使用( A. https(最好看下原理), B.双方进行秘钥加解密验证,即token方式+签名(防止内容被篡改), C.请求内容中加入时间戳和随机数并加密 )等方式保证安全
ps:签名算法、密钥的分配安全存储要设计好
以下是从百度找到的关于 重放攻击的相关概念和防御方法, 主要看概念和防御方法即可
概念
重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。重放攻击在任何网络通过程中都可能发生,是计算机世界黑客常用的攻击方式之一。
原理
重放攻击的基本原理就是把以前窃听到的数据原封不动地重新发送给接收方。很多时候,网络上传输的数据是加密过的,此时窃听者无法得到数据的准确意义。但如果他知道这些数据的作用,就可以在不知道数据内容的情况下通过再次发送这些数据达到愚弄接收端的目的。例如,有的系统会将鉴别信息进行简单加密后进行传输,这时攻击者虽然无法窃听密码,但他们却可以首先截取加密后的口令然后将其重放,从而利用这种方式进行有效的攻击。再比如,假设网上存款系统中,一条消息表示用户支取了一笔存款,攻击者完全可以多次发送这条消息而偷窃存款
类型
1.根据重放消息的接收方与消息的原定接收方的关系,重放攻击可分为3种:
第一种是直接重放,即重放给原来的验证端,直接重放的发送方和接收方均不变。
第二种是反向重放,将原本发给接收方的消息反向重放给发送方。
第三种是第三方重放,将消息重放给域内的其他验证端。
2.基于重放法发生在什么回合,可以将重放攻击分为两类:
(1)在当前回合外攻击中,重放的消息来自协议当前回合之外,因此至少涉及协议的两个回合运行,可以并发也可以顺序地实现。
①交错攻击需要两回合或多回合同时执行协议,著名的例子是Lowe对NSPK协议的攻击。
②经典重放也涉及当前回合外执行协议,但不要求同时执行协议。攻击者存储在前面的回合中所传送的消息,并抓住机会重放它们,对协议的当前回合进行攻击。Denning和Sacco对NSSK协议的攻击,就是经典重放的一个著名例子。
(2)在当前回合内攻击中,重放的消息来自协议当前回合。
3.考查攻击者对消息重定向,这种分类法称为目的地分类法。分类如下。
(1)偏转重放攻击:重放消息重新定向,发送给不同于原接收者的第三方。这种情形可进一步分为如下子类:
①重放消息重定向,发送给原发送者,称为反射重放攻击。
②重放消息重定向,发送给第三方,即不同于原发送者和原接收方的第三方。
(2)攻击者通过延时的方法(可能涉及不同的协议回合),将消息传送给目的地,称为直接重放攻击
防御方案
1. 加密,时间戳,每个包要有包序号,每次同向加1,收到重复序号认为是攻击,可以抵御重放攻击。此外借助于HTTPS/TLS其自身机制,保证了消息完整性,并且可以抵御重放攻击。由于加密,对方也无法看到明文内容。
2. 客户端生成一串随机数R1,发给服务器,服务器判断此R1是否重复,之后根据算法(R1+R2)生成密钥。最好是结合验签机制。
3. https 会被中间人攻击,Fiddler 能用替换证书的方式截获并还原明文。非对称加密(例如RSA)是个好办法,不过你得防止别人直接反编译你的代码分析出你的明文拼接方式。
(1)加随机数。该方法优点是认证双方不需要时间同步,双方记住使用过的随机数,如发现报文中有以前使用过的随机数,就认为是重放攻击。缺点是需要额外保存使用过的随机数,若记录的时间段较长,则保存和查询的开销较大。
(2)加时间戳。该方法优点是不用额外保存其他信息。缺点是认证双方需要准确的时间同步,同步越好,受攻击的可能性就越小。但当系统很庞大,跨越的区域较广时,要做到精确的时间同步并不是很容易。
(3)加流水号。就是双方在报文中添加一个逐步递增的整数,只要接收到一个不连续的流水号报文(太大或太小),就认定有重放威胁。该方法优点是不需要时间同步,保存的信息量比随机数方式小。缺点是一旦攻击者对报文解密成功,就可以获得流水号,从而每次将流水号递增欺骗认证端。
在实际中,常将方法(1)和方法(2)组合使用,这样就只需保存某个很短时间段内的所有随机数,而且时间戳的同步也不需要太精确。
对付重放攻击除了使用本以上方法外,还可以使用挑战一应答机制和一次性口令机制,而且似乎后面两种方法在实际中使用得更广泛。
相关参考链接 ;
https://baike.baidu.com/item/%E9%87%8D%E6%94%BE%E6%94%BB%E5%87%BB