网络攻击之防重放篇~

百度百科介绍

重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。重放攻击在任何网络通过程中都可能发生,是计算机世界黑客常用的攻击方式之一。

核心概念

1. 防重放的核心在于,防止黑客抓取请求报文,从而进行重播攻击,也就意味我们不能允许客户端,用相同参数,请求第二次。
2. 对应解决方案:客户端传递额外的参数,时间戳、随机数、流水号等,服务端再判断是否为一次请求。

一、基于timestamp解决方案

1.一次正常的http请求,响应时间一般在5s内完成,基本上不会超过60s,我们根据自己接口的响应时间设置阈值
2.客户端每次发起请求,携带当前时间戳
3.服务端接收请求后,我们校验客户端时间戳与服务端时间戳的差值,超过了60s既认为是重播攻击

总结:实现简单有效,但在60s内,黑客仍可实现重播攻击,时间戳最好再加盐处理。

Java代码示例

if((服务器当前时间戳-用户携带的时间戳) > 60){
	return "非法请求";
}else{
	return "请求成功"
}

二、基于nonce解决方案

1.客户端每次发起请求,都需要携带uuid(要求唯一即可)
2. 服务端接收到请求后,先校验用户携带的uuid是否存在,不存在:将uuid存储到数据库或缓存服务器中,存在:既认为是重播攻击

总结:实现简单有效,但随着请求量越多,存储的数据会越来越大。

Java代码示例

Uuid uuid= UuidMapper.select(uuid);
if(uuid!= null){
	return "非法请求";
}else{
	UuidMapper.insert(uuid);
	return "请求成功"
}

三、基于timestamp和nonce解决方案

总结:结合以上两种方案,并定期清理缓存。

Java代码示例

if((服务器当前时间戳-用户携带的时间戳) > 60){
	return "非法请求";
}
if(uuid!= null){
	return "非法请求";
}else{
	保存uuid并设置缓存失效时间;
	return "请求成功"
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qwuedh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值