- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我是一名优秀的程序员,十分优秀!