java - Spring 安全: How to validate password length

标签 java spring-mvc spring-boot spring-security

我有一个 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/

相关文章:

css - spring boot + thymeleaf 3+bootStrap,配置bootstrap返回404错误

java - Custom Validation Annotation 引入了ConcurrentModificationException

java - mongodb 尝试在更新中编辑 _id 字段时抛出错误

java - 如何防止@Cascade({CascadeType.ALL}) 保存重复的重复记录

java - cassandraOperations.select 忽略空值

java - Openfeign+Spring云: Field required a bean of type that could not be found

java - 除非使用 Thread.interrupted(),否则会错过中断吗?

java - 单表的多个 POJO/实体

spring - 如何注入(inject)@products方法

java - 身份验证成功后用户凭证上下文无效