为了账号安全,请及时绑定邮箱和手机立即绑定

关于加签名防攻击的疑问

关于加签名防攻击的疑问

慕码人8056858 2019-01-19 06:40:46
在网上看到一个方案是:“客户端将参数排序进行MD5加密后,得到sign。 服务端再次将你的参数排序进行MD5加密,比较两次得到的值,相同校验成功。为了防止抓包,然后不停发送攻击的包“ 这样做 咋就能防止攻击了呢? 攻击者也可以进行 把参数MD5加密后发给服务器啊。
查看完整描述

3 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

如果只做md5,一般要在md5时候,加一个appkey之类的东东,或者说salt,这个东东是不通过参数传递的(前后端都知道值),这样就防止别人篡改和构造请求了。

如果同时做md5和加密,也可以,密钥不传就可以了。

查看完整回答
反对 回复 2019-02-12
?
精慕HU

TA贡献1845条经验 获得超8个赞

补充一下楼上的答案,重点说说重放攻击问题。

有可能请求被其他人抓包,拿来重复请求。
那么设计思路是下面这样的:

首先,所有方案在加密的时候都应该有一个约定的秘钥。保证攻击者不能自己算出sign

方案A:验证md5是否被请求过

这样每次请求都有一个唯一的md5,服务端在第一次完成请求后,把md5写入缓存。
下次处理请求之前先判断一下有没有这个md5,如果有就代表是重复请求。

但有没有想到这里有个缺点:
每一个请求都要写一个md5进缓存,请求量比较大的话非常占缓存

方案B:给参数里加个时间戳

如果时间差在60s以上,代表这个请求是被别人抓取到了,拿来做重复请求攻击。

这种方案也有缺点:
客户端和服务端的时间一致性要求比较高。

终极方案:两个结合一下。

时间戳+md5
1、时间差120s以上代表重复请求
2、md5写缓存,缓存时长120s(大于等于上面的值就行),判断如果有md5代表重复请求

这样相对比较好的解决了重复请求问题。

查看完整回答
反对 回复 2019-02-12
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

其实我倒是关注 将参数排序 这个不排序 有什么影响吗?如果直接把提交的数据拿来用不是更方便,毕竟安全体现再 appkey 上了啊

查看完整回答
反对 回复 2019-02-12
  • 3 回答
  • 0 关注
  • 523 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信