单纯的sign+time会存在漏洞,比如截取后立刻重放可能该请求还是有效的, 这取决于截取时效和当前时间与time的时间差的阀值. 使用sign+time+redis能实现该功能: 去redis中查找是否有key为sign的string - 如果有,说明这个key已在有效期内被使用了,那么这个请求就可以判断是重放请求 检查sign的有效性和当前时间与time的时间差的阀值 - 如果有效,则在redis创建这个key,把时效时间设置得比时间差的阀值**略长**即可. 网上也有基于time+nonce+sign+redis的方案,不过个人认为nonce与sign的功能是重复的,可以省略,当然nonce的存储空间比存储sign更有优势,自己取舍. 最后, 请使用https增加截取成本.
单纯的
sign+time
会存在漏洞,比如截取后立刻重放可能该请求还是有效的, 这取决于截取时效和当前时间与time的时间差的阀值.使用
sign+time+redis
能实现该功能:去redis中查找是否有key为sign的string
检查sign的有效性和当前时间与time的时间差的阀值
网上也有基于time+nonce+sign+redis的方案,不过个人认为nonce与sign的功能是重复的,可以省略,当然nonce的存储空间比存储sign更有优势,自己取舍.
最后, 请使用https增加截取成本.