jfinal3.0中的slowEquals有什么作用?

chenhaibj 发布于 2017/02/04 16:49
阅读 330
收藏 0

JFinal3.0中增加了一个方法slowEquals,用于密码的验证,不太明白这个和equals方法有何不同?这个方法的优势是什么?

加载中
0
JFinal
JFinal

   为了防止黑客攻击,原理大致是这样:常规的字符串比较方法,会对字符串中的字符从头到尾逐字符进行对比,当出现不同字符时 return false,那么前缀正确字符越多,比较时间就越长,黑客可以通过程序去尝试不同的前缀,得到统计规律,逐步猜测出所有密码值

    而 jfinal 提供的 slowEquals 方法,确保了攻击者无论发送什么密码过来,比较时间是一样的,因此这类攻击方法将失效。当然,在实际操作的时候要稍微改进一下,因为大部分密码都是 hash 过的值,而非明文,所以黑客在制做这个最终对比字符串时,会让 hash 过的字符串去对比

    jfinal 源代码中的种种考虑是极其深刻的,很少有人注意到这点。

罗格林
罗格林
回复 @JFinal : 不过JFinal能提供这样的技术细节还是很赞的
罗格林
罗格林
回复 @JFinal : 回复 @JFinal : 文中所述时间攻击的假设有两条: 1. 攻击者知道哈希函数类型, 2. 攻击者知道盐值. 第一条可以从公开的方法中挑选尝试, 第二条一般情况下没有太大的可能性. 尤其是当系统采用bcrypt之类的算法, 每个盐值都随机产生, 而且不用和数据存储在一起. 至于其他的算法, 完全可以随机生成盐值放入数据库. 外界攻击无从获得
JFinal
JFinal
回复 @罗格林 : 前面说的 "hash过的" 是指服务端程序去做的 hash 动作,并非指黑客发送 hash 过的字符串
JFinal
JFinal
回复 @罗格林 : 一般人无法通过上面的信息量明白原因,网上很多这方面资料,osc也有: http://www.oschina.net/news/49852/salted-password-hash
罗格林
罗格林
黑客发送任何字符串都会经过hash运算, 怎么可能发出hash 过的字符串去对比?
下一页
返回顶部
顶部