我正在尝试创建一个正则表达式来阻止所有字符串,除非与 <
任何人都可以为此建议一个正则表达式吗?我将与.>
<select>.
javax.util.Pattern
我正在尝试编写一个解决方案来阻止通过请求和 URL 进行的注入攻击和 XSS 尝试。为此,我将阻止特殊字符和字符序列,但有一些例外。一个例外是,我必须允许<select>
(在它们之间有选择的尖括号),因为在某些情况下,它会被合法地传递到请求中。但是必须阻止所有其他尖括号组合。这就是我提出问题的原因。
我正在尝试创建一个正则表达式来阻止所有字符串,除非与 <
任何人都可以为此建议一个正则表达式吗?我将与.>
<select>.
javax.util.Pattern
我正在尝试编写一个解决方案来阻止通过请求和 URL 进行的注入攻击和 XSS 尝试。为此,我将阻止特殊字符和字符序列,但有一些例外。一个例外是,我必须允许<select>
(在它们之间有选择的尖括号),因为在某些情况下,它会被合法地传递到请求中。但是必须阻止所有其他尖括号组合。这就是我提出问题的原因。
这会从字符串中删除 < 和 > 字符,除非它们是您提到的 <select> 的一部分:
someString.replaceAll("<(?!select>)|(?<!\\<select)>", "");
Pattern p = Pattern.compile(
"(?<!\\<select)>|<(?!\s*select\s*>)",
Pattern.CASE_INSENSITIVE);
这将发现 > 前面没有 <select 并且 < 后面没有 select> 允许它不区分大小写。
现在通常我会检查元素周围的(合法)空白(“ < select >
”是有效的),但是后面的问题有我不确定如何解决的问题。
我怀疑它可以用一个正则表达式来完成,但将它分成几个阶段可能更容易,例如:
"@"
=>"@0"
"<select>"
=>"@1"
"<"
=>""
">"
=>""
"@1"
=>"<select>"
"@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”
步骤 5
“abc <选择> @0 d”
步骤 6
“abc <选择> @ d”