尝试在 ESAPI.properties 中包含正则表达式,但它会抛出错误,因为不是有效的正则表达式

问题描述 投票:0回答:1

我在 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)。但对于所有这些类型都会导致错误。

如何解决这个问题?

java regex escaping esapi http-parameters
1个回答
0
投票

首先,正如 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*/+=@_}{|\\\\ ]*$
© www.soinside.com 2019 - 2024. All rights reserved.