Я пытаюсь добавить пользовательскую защиту XSS, создав RequestWrapper, расширяющий HttpServletRequestWrapper в фильтре XSS. Приведенный ниже код обеспечивает защиту XSS для: 1. запроса параметров 2. полезной нагрузки.
public class XssRequestWrapper extends HttpServletRequestWrapper {
XssRequestWrapper(HttpServletRequest request) {
super(request);
}
@Override
public String getQueryString() {
/*
Custom XSS logic
*/
}
@Override
public String getParameterMap() {
/*
Custom XSS logic
*/
}
@Override
public String getParameterValues() {
/*
Custom XSS logic
*/
}
}
Но когда я настраиваю свой REST Api с аннотацией @RequestBody в моем контроллере, переопределенное значение getParameterValues не вызывается. Вместо этого вызывается getInputStream , что приводит к добавлению следующего:
@Override
public ServletInputStream getInputStream() throws IOException {
/*
Custom XSS logic
*/
}
Существует ли какой-либо лучший / идеальный способ обеспечить защиту XSS для передаваемых данных через аннотацию @RequestBody?
Редактировать: Решение: https://www.baeldung.com/spring-reading-httpservletrequest-multiple-times Поскольку я использовал ContentCachingRequestWrapper в одном из моих предыдущих фильтров, я не смог использовать его и, следовательно, пошел вперед с вышеуказанным решением. Кэшируя запрос, я смог прочитать его несколько раз и выполнить XSS-проверку кэшированного содержимого.