SafeString 的正则表达式

Regular Expression for SafeString

我正在使用内置的 esapi 验证器。定义如下:

Validator.SafeString=^[.\p{Alnum}\p{Space}]{0,1024}$

我对正则表达式不是很熟悉,经过一番阅读,我了解到这个表达式匹配字母数字和空格。

我想扩展此表达式以包含 *,-()&+ 和 /。我尝试执行以下操作,但它似乎不起作用

Validator.SafeString=^[.\p{Alnum}\p{Space}*,-()&+]{0,1024}$

您必须将连字符放在末尾,因为如果您不这样做,连字符将用作范围而不是单个字符:

Validator.SafeString=^[.\p{Alnum}\p{Space}*,()&+-]{0,1024}$
                                                  ^--- here

更新: 关注 avgvstvs 评论:

From 1.7 to later, you would have to add the flag (?u) to the beginning of your regex in order for \w\s to work.

您也可以试试:

Validator.SafeString=(?u)^[.\w\s*,()&+-]{0,1024}$

我会在 validation.properties 中创建一个单独的条目,OWASP 对 SafeString 的意图是为任何应用程序提供有保证的安全字符串。通过接受可以解释为 Javascript 中的代码的字符,您将不再拥有 API 中预期的 SafeString。如果您的应用程序的其他部分按原计划使用 SafeString,那可能会产生灾难性的后果。

首先使用@Fede's 正则表达式,但地址如下:

Validator.SomethingElse=^[.\p{Alnum}\p{Space}*,()&+-]{0,1024}$

并这样称呼它:

ESAPI.validator().isValidInput(CONTEXT, input, "SomethingElse", MAX_FIELD_LENGTH, true);

注意"true"标记对应的是一个字符串是否可以null.