2016-08-01 6 views
-1

私は名前が与えられた文字列をあるように正規表現"(?=" + name + ").*?:(\\d+)"を、使用した後正規表現は間違った表現にマッチする

abs1.qwerty.com:1234 

abs11qwerty.com:1234 

のような2つの異なる文字列を持っています。彼らは同じであると仮定しているので、私は間違った一致を受けます。そのような問題に対する解決策は何でしょうか?

+2

1)コードをフォーマットします。 2)入力例と期待出力を提供する。 3)実際の出力を提供する。 –

答えて

2

name正規表現注射攻撃です。

nameは、エンジンがおそらく攻撃者がシステムからデータを抽出することができ、すべての名前と一致します

name = ".*" 

たとえば

ため、パターンの一部としてそれらにそれらを解釈することで正規表現の文字を持っている場合。

使用次のようなもの:

あなたの例では
final String pattern = String.format("(?=%s).*?:(\\d+)", Pattern.quote(name)) 

、パターンは正規表現エンジンはこれがあると解釈abs1.qwerty.comの場合:

  • "ABS1" - 文字通り
  • "" - 一度の任意の文字
  • "qwerty" - リテラル
  • "。" - 任意の文字、一度
  • は "COM" - 文字通り

ので、パターンは喜んで "abs11qwerty.com" と一致します。

関連する問題