JFinal3.0中增加了一个方法slowEquals,用于密码的验证,不太明白这个和equals方法有何不同?这个方法的优势是什么?
为了防止黑客攻击,原理大致是这样:常规的字符串比较方法,会对字符串中的字符从头到尾逐字符进行对比,当出现不同字符时 return false,那么前缀正确字符越多,比较时间就越长,黑客可以通过程序去尝试不同的前缀,得到统计规律,逐步猜测出所有密码值
而 jfinal 提供的 slowEquals 方法,确保了攻击者无论发送什么密码过来,比较时间是一样的,因此这类攻击方法将失效。当然,在实际操作的时候要稍微改进一下,因为大部分密码都是 hash 过的值,而非明文,所以黑客在制做这个最终对比字符串时,会让 hash 过的字符串去对比
jfinal 源代码中的种种考虑是极其深刻的,很少有人注意到这点。
######回复 @JFinal : 不过JFinal能提供这样的技术细节还是很赞的######回复 @JFinal : 回复 @JFinal : 文中所述时间攻击的假设有两条: 1. 攻击者知道哈希函数类型, 2. 攻击者知道盐值. 第一条可以从公开的方法中挑选尝试, 第二条一般情况下没有太大的可能性. 尤其是当系统采用bcrypt之类的算法, 每个盐值都随机产生, 而且不用和数据存储在一起. 至于其他的算法, 完全可以随机生成盐值放入数据库. 外界攻击无从获得######回复 @罗格林 : 前面说的 "hash过的" 是指服务端程序去做的 hash 动作,并非指黑客发送 hash 过的字符串######回复 @罗格林 : 一般人无法通过上面的信息量明白原因,网上很多这方面资料,osc也有: http://www.oschina.net/news/49852/salted-password-hash######黑客发送任何字符串都会经过hash运算, 怎么可能发出hash 过的字符串去对比?版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。