Krz*_*soń 15 java regex security java-11
我尝试使用regexp和(使用大量)输入使用jshell 重新创建正则表达式拒绝服务攻击:(a+)+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!a
Pattern.compile("(a+)+")
.matcher("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!")
.matches()
Run Code Online (Sandbox Code Playgroud)
但每次尝试时,这都很快完成.Java中的regexp实现与其他实现不同吗?或链接的维基百科页面错了?
(顺便说一句.我正在使用Java 11,如果那是相关的)
编辑:看起来它与Java版本有关,当我在Java 8上尝试它时,它会挂起,但在Java 9和11中它立即可用.这些版本之间的变化可能会对此产生什么影响?Java中的所有正则表达式都是安全的吗?
是否有特定的Java JEP改变了regexp实现?我想知道什么样的regexp仍然是新Java的问题.
根据文章RSPEC-2631,ReDoS 问题已在 Java 9 及更高版本中得到处理:
像 OpenJDK 9+ 这样的 Java 运行时通过在正则表达式求值的实现中提供额外的保护来缓解这个问题。在这些运行时,上面的示例不容易受到攻击。
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |