[英]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.