簡體   English   中英

在 Java 中將“Pattern.LITERAL”標志作為 Pattern.compile(String regex, int flags) 方法的一部分是否可以減輕 String regex 注入?

[英]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);

檢查Pattern.LITERAL文檔

指定此標志后,指定模式的輸入字符串將被視為文字字符序列。 輸入序列中的元字符或轉義序列將沒有特殊含義。

所以,這個標志使任何模式成為純文本。 \\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM