Регулярное выражение для SafeString

1

Я использую встроенный валидатор esapi. Он определяется следующим образом:

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

Я не очень хорошо знаком с регулярным выражением, и после некоторого чтения я понимаю, что это выражение соответствует буквенно-цифровым и пробелам.

Я хотел бы распространить это выражение на include *, -() & + и /. Я попытался сделать следующее, но он, похоже, не работает

Validator.SafeString=^[.\\p{Alnum}\\p{Space}*,-()&+]{0,1024}$
  • 0
    Если вы использовали вторую версию регулярного выражения, я разместил комментарий к @Fede, объясняющий, почему НЕ использовать его как написано.
Теги:
esapi

2 ответа

1
Лучший ответ

Я бы создал отдельную запись в validation.properties, намерение OWASP для SafeString - обеспечить гарантированную безопасную строку для любого приложения. Принимая символы, которые могут быть интерпретированы как код в Javascript, у вас больше нет SafeString как предполагалось в API. Это может иметь катастрофические последствия, если другие части вашего приложения используют SafeString как первоначально предполагалось.

Используйте первое регулярное выражение @Fede, но обращайтесь к нему следующим образом:

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

И назовите это так:

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

Обратите внимание, что знак "истина" соответствует тому, является ли строка null.

  • 0
    Хороший ответ, а также помогает улучшить мою. +1
2

Вы должны положить дефис в конце, поскольку, если вы этого не сделаете, дефис работает как диапазон, а не один символ:

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

Обновление: после комментариев avgvstvs:

От 1.7 до более поздней версии вам нужно будет добавить флаг (? U) в начало вашего регулярного выражения, чтобы \w\s работал.

Вы также можете попробовать:

Validator.SafeString=(?u)^[.\\w\\s*,()&+-]{0,1024}$
  • 1
    У вашего второго регулярного выражения есть роковая ошибка. Метасимволы \\w и \\s определены только в ASCII, заданном по умолчанию. До Java 1.7 единственным решением было то, что сделал OWASP, \\p{Alnum}\\p{Space} потому что они были определены во всем диапазоне кодовых точек UTF-8. С версии 1.7 и позже вам нужно будет добавить флаг (?u) в начало вашего регулярного выражения, чтобы \\w\\s работал. Для ясности и ясности я бы предложил использовать версию регулярного выражения OWASP.
  • 0
    @avgvstvs спасибо за полезный комментарий. Я обновлю ответ с вашим комментарием
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню