我在 HTTPParameterValue 的 ESAPI.properties 中定义了以下正则表达式值。
Validator.HTTPParameterName=^\[\\u0080-\\uFFFFa-zA-Z0-9.,;?!:%'\\\\p{L}$\\\\-\\\\"\\\\\<\\\\\>\\\\\~\\\\\[\\\\\]\\\\\`\\\\^\\\\#\\\\&\\\\(\\\\)\\\\\\n\\\\\\t\\\\\\r\\\\\*\\\\/+=@\_}{|\\\\\\\\ \]\*$
Validator.HTTPParameterValue=^\[\\u0080-\\uFFFFa-zA-Z0-9.,;?!:%'\\\\p{L}$\\\\-\\\\"\\\\\<\\\\\>\\\\\~\\\\\[\\\\\]\\\\\`\\\\^\\\\#\\\\&\\\\(\\\\)\\\\\\n\\\\\\t\\\\\\r\\\\\*\\\\/+=@\_}{|\\\\\\\\ \]\*$
我试图在这个正则表达式中包含(即退格转义字符)。但我收到以下错误。
INFO [stdout](默认任务 1)ESAPI:HTTPParameterName 的 SecurityConfiguration 不是 ESAPI.properties 中的有效正则表达式。返回空值
INFO [stdout](默认任务-1)11:25:04.358 [默认任务-1]错误
未通过 ESAPI 验证配置设置所选类型 [HTTPParameterName]
是否有任何特定格式可以在正则表达式中包含此退格键? 尝试了几种类型,例如 (\ 、 [ ]、\b)。但对于所有这些类型都会导致错误。
如何解决这个问题?
首先,正如 Chris 提到的,
\b
不是退格字符。 (转义序列列表及其含义位于文档中。)您可以使用 \x08
或 \ch
或 \010
代替。 (还有其他方法,但这些可能是最简单的。)
其次,你想要清楚地理解反斜杠在做什么,而不是只是尝试随机的事情。从您实际的正则表达式开始:
^[\x08\u0080-\uFFFFa-zA-Z0-9.,;?!:%'\p{L}$\-"<>~\[\]`\^#&()\n\t\r*/+=@_}{|\\ ]*$
(大多数字符不需要在
[
…]
表达式中转义。您只需要实际转义序列的反斜杠,例如 \p{L}
,以及在括号表达式中有意义的字符,例如连字符、脱字号、字面上的反斜杠和括号本身。)
在 properties 文件语法 中,文字反斜杠字符表示为
\\
。因此,您需要做的就是将正则表达式中的每个反斜杠替换为两个反斜杠:
Validator.HTTPParameterName=^[\\x08\\u0080-\\uFFFFa-zA-Z0-9.,;?!:%'\\p{L}$\\-"<>~\\[\\]`\\^#&()\\n\\t\\r*/+=@_}{|\\\\ ]*$
Validator.HTTPParameterValue=^[\\x08\\u0080-\\uFFFFa-zA-Z0-9.,;?!:%'\\p{L}$\\-"<>~\\[\\]`\\^#&()\\n\\t\\r*/+=@_}{|\\\\ ]*$
为了可读性,您可能需要使用续行:
Validator.HTTPParameterName=\
^[\\x08\\u0080-\\uFFFFa-zA-Z0-9.,;?!:%'\\p{L}$\\-"<>~\\[\\]`\\^#&()\\n\\t\\r*/+=@_}{|\\\\ ]*$
Validator.HTTPParameterValue=\
^[\\x08\\u0080-\\uFFFFa-zA-Z0-9.,;?!:%'\\p{L}$\\-"<>~\\[\\]`\\^#&()\\n\\t\\r*/+=@_}{|\\\\ ]*$