ESAPI XSS предотвращение для предоставленного пользователем свойства URL

Один из моих REST API ожидает свойство "url", которое ожидает URL в качестве ввода от пользователя. Я использую ESAPI для предотвращения атак XSS. Проблема в том, что пользовательский URL-адрес является чем-то вроде

http://example.com/alpha?abc=def&phil=key%3dbdj

Метод cannonicalize из кодера ESAPI выдает здесь исключение вторжения, утверждая, что вход имеет смешанную кодировку, поскольку он кодируется по URL, а фрагмент '& phi' обрабатывается как кодированный HTML и, таким образом, является исключением.

У меня была похожая проблема с очисткой одного из URL-адресов моего приложения, где второй параметр запроса начинался с 'pa' или 'pi' и был преобразован в символы дельта или pi с помощью декодирования HTML. Пожалуйста, обратитесь к моемупредыдущий вопрос Stackoverflow здесь

Теперь, поскольку проблема заключается в том, что, поскольку весь URL-адрес поступает как ввод от пользователя, я не могу просто проанализировать параметры запроса и санировать их по отдельности, поскольку может быть создан злонамеренный ввод, объединяющий два параметра запроса и санирующий их по отдельности, который не будет работать в этом случае. дело.

Пример: & ltscr идет последней частью первого значения параметра запроса и ipt & gtalert (0); или что-то становится первой частью следующего контекста управления параметрами запроса.

Кто-нибудь сталкивался с подобной проблемой? Мне бы очень хотелось узнать, какие решения вы, ребята, реализовали. Спасибо за любые указатели.

РЕДАКТИРОВАТЬ: ответ ниже 'avgvstvs' не вызывает исключение вторжения (Спасибо!). Однако метод cannonicalize теперь изменяет исходную строку ввода. ESAPI рассматривает & phi параметра запроса как некоторый html-кодированный символ и заменяет его на «?» голец. Что-то вроде моего предыдущего вопроса, который связан здесь. Разница в том, что это был URL моего приложения, тогда как это пользовательский ввод. Мой единственный вариант - поддерживать здесь белый список?

Ответы на вопрос(1)

Ваш ответ на вопрос