[英]Does including “Pattern.LITERAL” flag as part of the Pattern.compile(String regex, int flags) method in Java mitigate String regex injection?
在下面的代码库中,我提供 Pattern.LITERAL 作为 Pattern.compile(String regex, int flags) 方法的标志之一,并希望告知此标志是否可以减轻正则表达式注入( https://owasp.org/www -community/attacks/Regular_expression_Denial_of_Service__-_ReDoS ) 在 Java 中与否? 下面是我提供的一个示例模式作为示例。 检查此正则表达式的字符串是用户提供的输入。
private final int flags = Pattern.CASE_INSENSITIVE | 模式.文字;
Pattern patternCheck = Pattern.compile("check\\s+test\\s+([\\w\\s-]+)cd(\\s+" + variable1 +
"|\\s+abc\\s+" + variable2 + ")\\s+to\\s+(abc|xyz)\\s+test\\s+ab\\s+xyz",flags);
指定此标志后,指定模式的输入字符串将被视为文字字符序列。 输入序列中的元字符或转义序列将没有特殊含义。
所以,这个标志使任何模式成为纯文本。 \\s
将匹配\\s
文本,而不是任何空格。
您需要确保的是:
Pattern.quote
转义模式的用户编写的文字部分。在您的情况下,您可以使用
Pattern patternCheck = Pattern.compile("check\\s+test\\s+([\\w\\s-]+)cd(\\s+" + Pattern.quote(variable1) + "|\\s+abc\\s+" + Pattern.quote(variable2) + ")\\s+to\\s+(abc|xyz)\\s+test\\s+ab\\s+xyz", Pattern.CASE_INSENSITIVE);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.