-1

正規表現を作成して、すべてをブロック<>、文字列で使用する場合を除き、 <select>.そのための正規表現を提案できますか? で使用しますjavax.util.Pattern

インジェクション攻撃とリクエストと URL を介した XSS の試みをブロックするソリューションを作成しようとしています。そのために、いくつかの例外を除いて、特殊文字と文字シーケンスをブロックします。例外の 1 つは、許可する必要があることです<select>(それらの間に select を含む山括弧)。これは、場合によっては正当にリクエストに渡されるためです。ただし、その他の山かっこの組み合わせはすべてブロックする必要があります。それが私の質問の理由です。

4

3 に答える 3

4

これは、あなたが言及したように <select> の一部でない限り、文字列から < および > 文字を削除します。

someString.replaceAll("<(?!select>)|(?<!\\<select)>", "");
于 2009-01-14T21:03:45.667 に答える
2
Pattern p = Pattern.compile(
  "(?<!\\<select)>|<(?!\s*select\s*>)",
  Pattern.CASE_INSENSITIVE);

これにより、> の前に <select がなく、< の後に select> がなく、大文字と小文字を区別しないことがわかります。

通常、要素の周りの (合法的な) 空白 (" < select >" は有効) をチェックしますが、後読みには問題があり、回避方法がよくわかりません。

于 2009-01-14T21:07:58.997 に答える
1

単一の正規表現で実行できると思いますが、段階に分割する方が簡単かもしれません。

  1. "@"=>"@0"
  2. "<select>"=>"@1"
  3. "<"=>""
  4. ">"=>""
  5. "@1"=>"<select>"
  6. "@0"=>"@"

注: これらはすべて、正規表現パターンではなくリテラル文字列です。エスケープ文字として任意に選択"@"しましたが、何でもかまいません。

例: "a <b> c <select> @ d"
ステップ 1
"a <b> c <select> @0 d"
ステップ 2
"a <b> c @1 @0 d"
ステップ 3
"a b> c @1 @0 d"
ステップ 4
"abc @1 @ 0 d"
step 5
"abc <select> @0 d"
step 6
"abc <select> @ d"

于 2009-01-14T20:57:27.050 に答える