В одном из моих REST API есть параметр запроса с именем «партнеры», который представляет собой список целых чисел, поэтому вы можете указать несколько значений в URL-адресе. В качестве предотвращения XSS-атак я удаляю вредоносный контент из входных данных с помощью ESAPI. Вот проблема:
Я заметил, что метод cannonicalize кодировщика ESAPI (использующий кодеки по умолчанию: HTMLEntityCodec,PercentCodec,JavaScriptCodec) изменяет значения параметров запроса, поскольку считает, что &p или &pa является своего рода кодировкой. См. примеры ниже
Что-то вроде
http://localhost:8080/product?partner=1
Работает как положено.
С другой стороны что-то вроде
http://localhost:8080/product/?pidentity=1&pidentity=2
Ввод после канонизации становится
`pidentity=1πdentity=2`
Какие у фреймворка проблемы с разбором, так как он считает, что это только один параметр запроса с двумя разделителями.
Если URL-адрес запроса похож на
http://localhost:8080/product?partner=1&partner=2
Ввод после канонизации становится
partner=1∂rtner=2
И &pa меняется на '∂'.
Как вы, наверное, догадались, я попытался изменить имя параметра запроса, и он работал нормально (вероятно, потому, что не было соответствующей кодировки). Кто-нибудь видел это раньше или может указать мне, что должно вызывать такое поведение? Это может показаться моей неопытностью, но для предотвращения XSS-атак я не уверен, стоит ли мне пытаться удалить какие-либо кодеки из кодировщика по умолчанию.