gpt4 book ai didi

java - Spring 安全 : How to validate password length

转载 作者:行者123 更新时间:2023-11-30 07:57:38 25 4
gpt4 key购买 nike

我有一个 Maven、Spring Boot、Spring MVC、AngularJS 堆栈项目。对于登录页面,我使用 Spring Security 来处理用户名/密码表单提交验证(来自 angularJS 客户端)。它工作正常但我还需要验证传入的密码字段不超过特定长度(甚至在检查验证之前)(我读到这在使用 ByCrypt 时会暴露一定的安全风险,因为用户可以发送非常长的密码,这需要太多时间进行散列)

无论如何,有没有办法用 Spring Security 来完成这个?可能我可以在我的 CustomUserDetailService 或 SpringSecurityConfiguration 类中做到这一点,但不知道如何去做。

最佳答案

我很好奇你是从哪里读到有关 bcrypt 和密码长度的信息的?算法花费的时间应该只取决于成本因素。该算法使用密码创建一个 18 个单词的流,并反复循环。所以实际上可用的密码大小在理论上被限制为 72 字节。超出此范围的任何内容都将被忽略。

这是一个快速测试(在 Haskell repl 中,因此不代表二进制时间)来演示:

Data.ByteString> hashPassword 5 p :: IO ByteString
"$2a$05$D2.hLTr0U1xMul/Y2Wsbjeddxp9SNumh5rAe.1oyaZUL4SceCZqUK"
(0.46 secs, 1,673,001,216 bytes)
Data.ByteString> hashPassword 5 tags :: IO ByteString
"$2a$05$bu9zO6ricNsrDTynjLm72emmiIdxulTXFGz0F11WOpSkh/R5viSmC"
(0.43 secs, 1,672,997,088 bytes)
Data.ByteString> Data.ByteString.length p
8
Data.ByteString> Data.ByteString.length tags
1274875

p 是字符串“password”,tags 是我的 emacs 标签文件,大小为 1.2MB。如您所见,散列每个所需的时间是相同的。正如预期的那样,将成本因子增加一会使哈希时间加倍:

 Data.ByteString> hashPassword 6 p :: IO ByteString
"$2a$06$UCIg6bMg57zvl2BM38cAeeg028oQ015Kt4V10J9OpZ3NsInOH.KJW"
(0.87 secs, 3,311,739,024 bytes)
Data.ByteString> hashPassword 6 tags :: IO ByteString
"$2a$06$GpqdSvGMJ/v3H9NycKjBceKE.J9VzrwtYneIFyvlLMyAjUI71AnCe"
(0.85 secs, 3,311,748,456 bytes)

所以我认为问题所依据的假设是错误的。一般来说,HTTP 请求的大小应该针对您的应用程序进行适当限制,但您可能不必特别担心密码的长度。

关于java - Spring 安全 : How to validate password length,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41075086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com