Есть ли какие-либо преимущества при использовании проверки номеров ESAPI?

Меня попросили добавить некоторую проверку ввода во все наши конечные точки REST. В нашей системе есть два настраиваемых ограничения проверки, охватывающих библиотеку ESAPI; один для String, обертка #isValidInput и один для Long, обертывающий #isValidNumber.

#isValidNumber, кажется, просто проверяет минимальное и максимальное значение числа (то, что я могу просто сделать с JSR-303 @Min / @Max). Существуют ли какие-либо дополнительные преимущества для использования библиотеки ESAPI, или я могу просто удалить пользовательское ограничение и добавить аннотации проверки бина?

Я согласен с тем, что нам нужна канонизация строк, предоставляемая ESAPI, но я немного скептически отношусь к числам.


person Dimitrios K.    schedule 08.10.2015    source источник


Ответы (1)


Существуют ли какие-либо дополнительные преимущества для использования библиотеки ESAPI, или я могу просто удалить пользовательское ограничение и добавить аннотации проверки бина?

Короче говоря, да. Если вы заметили последний параметр в вызове #isValidInput, на который вы ссылаетесь, заключается в том, следует ли включить канонизация включена или выключена. Если ваше приложение отключило его, единственное преимущество, которое даст вам ESAPI, — это передача вашего регулярного выражения проверки в validation.properties, где, если возникнет проблема с продуктом, вы можете изменить значение и перезапустить сервер, сохранив сборку и развертывание приложения. JSR-303 потребует перекомпиляции и развертывания.

Однако, если вы оставили канонизацию включенной, ESAPI предоставляет одну вещь, которую я не нашел в другой библиотеке безопасности Java на сегодняшний день, а именно способность обнаруживать смешанная кодировка и множественная кодировка для заданной входной строки. С точки зрения судебной экспертизы и реагирования на инциденты, это чрезвычайно полезно, поскольку мы можем определить, подвергается ли наше веб-приложение атаке в режиме реального времени, а также записывать и проверять информацию о пользователе, который это делает.

^^^Похоже, ты все это знаешь по своему последнему утверждению. Я не видел веб-контейнера, который не прошел бы Strings для чисел. Я предполагаю, что вы извлекаете его из request.getParameter("foo");, что означает, что это строка, и вам все еще нужна защита, обеспечиваемая канонизацией. Даже если он может попасть в исключение синтаксического анализа при преобразовании в Integer или Long, есть также риск переполнения или недополнения, что может нарушить работу вашего приложения по-другому.

person avgvstvs    schedule 09.10.2015