猿问

关于加签名防攻击的疑问

在网上看到一个方案是:“客户端将参数排序进行MD5加密后,得到sign。 服务端再次将你的参数排序进行MD5加密,比较两次得到的值,相同校验成功。为了防止抓包,然后不停发送攻击的包“

这样做 咋就能防止攻击了呢?
攻击者也可以进行 把参数MD5加密后发给服务器啊。

慕码人8056858
浏览 524回答 3
3回答

一只名叫tom的猫

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

精慕HU

补充一下楼上的答案,重点说说重放攻击问题。 有可能请求被其他人抓包,拿来重复请求。那么设计思路是下面这样的: 首先,所有方案在加密的时候都应该有一个约定的秘钥。保证攻击者不能自己算出sign 方案A:验证md5是否被请求过 这样每次请求都有一个唯一的md5,服务端在第一次完成请求后,把md5写入缓存。下次处理请求之前先判断一下有没有这个md5,如果有就代表是重复请求。 但有没有想到这里有个缺点:每一个请求都要写一个md5进缓存,请求量比较大的话非常占缓存 方案B:给参数里加个时间戳 如果时间差在60s以上,代表这个请求是被别人抓取到了,拿来做重复请求攻击。 这种方案也有缺点:客户端和服务端的时间一致性要求比较高。 终极方案:两个结合一下。 时间戳+md51、时间差120s以上代表重复请求2、md5写缓存,缓存时长120s(大于等于上面的值就行),判断如果有md5代表重复请求 这样相对比较好的解决了重复请求问题。

回首忆惘然

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

相关分类

Java
我要回答