弱点の説明
このタイプの脆弱性に対して Coverity スキャンによって報告されるエラー メッセージは次のとおりです。
Unintended regular expression (REGEX_CONFUSION)
The string manipulation will return incorrect results for some inputs.
上記のプロンプトの翻訳は次のことを意味します:
一部の入力文字列操作による予期しない正規表現 (正規表現の混乱) により、誤った結果が返されました。
簡単に言うと、正規表現の使用方法が間違っています。
サンプルコード
上記のエラーのサンプル コードを見てください。
public void regexConfusion() {
String s = "D:/temp/../dd";
s = s.replaceAll("..", "-");
System.out.println(s); //------d
}
..
上記のコードでは正規表現を使用して置換を行っていますが、本来は文字内の 2 つの点 ( ) を横線 ( ) に置き換えることを意味します-
。
つまり、 にD:/temp/../dd
置き換えますD:/temp/-/dd
。
ただし、.
これは正規表現のワイルドカード文字であり、任意の文字を表すことができ、2 は任意の 2 文字.
を意味します。したがって、上記のコードの実際の効果は-
、文字列内の任意の 2 文字を に置き換えることです。上記は奇数ですが、最後の文字を除き、残りの 2 文字はすべて次の文字に置き換えられます。