在网上看到一个方案是:“客户端将参数排序进行MD5加密后,得到sign。服务端再次将你的参数排序进行MD5加密,比较两次得到的值,相同校验成功。为了防止抓包,然后不停发送攻击的包“这样做咋就能防止攻击了呢?攻击者也可以进行把参数MD5加密后发给服务器啊。
2 回答
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
如果只做md5,一般要在md5时候,加一个appkey之类的东东,或者说salt,这个东东是不通过参数传递的(前后端都知道值),这样就防止别人篡改和构造请求了。如果同时做md5和加密,也可以,密钥不传就可以了。
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
补充一下楼上的答案,重点说说重放攻击问题。有可能请求被其他人抓包,拿来重复请求。那么设计思路是下面这样的:首先,所有方案在加密的时候都应该有一个约定的秘钥。保证攻击者不能自己算出sign方案A:验证md5是否被请求过这样每次请求都有一个唯一的md5,服务端在第一次完成请求后,把md5写入缓存。下次处理请求之前先判断一下有没有这个md5,如果有就代表是重复请求。但有没有想到这里有个缺点:每一个请求都要写一个md5进缓存,请求量比较大的话非常占缓存方案B:给参数里加个时间戳如果时间差在60s以上,代表这个请求是被别人抓取到了,拿来做重复请求攻击。这种方案也有缺点:客户端和服务端的时间一致性要求比较高。终极方案:两个结合一下。时间戳+md51、时间差120s以上代表重复请求2、md5写缓存,缓存时长120s(大于等于上面的值就行),判断如果有md5代表重复请求这样相对比较好的解决了重复请求问题。
添加回答
举报
0/150
提交
取消
