开发者社区> 问答> 正文

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

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

展开
收起
kun坤 2020-06-06 13:41:40 486 0
1 条回答
写回答
取消 提交回答
  •    为了防止黑客攻击,原理大致是这样:常规的字符串比较方法,会对字符串中的字符从头到尾逐字符进行对比,当出现不同字符时 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 过的字符串去对比?
    2020-06-06 13:41:45
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第7讲】:Spring Boot 2.0安全机制与MVC身份验证实战(Java面试题) 立即下载
Java Spring Boot开发实战系列课程【第15讲】:Spring Boot 2.0 API与Spring REST Docs实战 立即下载
杜万-Java reactive programming - Reactor 3 and Spring WebFlux 立即下载