Spring: Как добавить защиту XSS в @RequestBody в сервисе RESTful? - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь добавить пользовательскую защиту 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-проверку кэшированного содержимого.

1 Ответ

0 голосов
/ 16 февраля 2020

Я немного запутался в том, что вы пытаетесь достичь с помощью кода.

Первое, во-первых, существует три типа уязвимостей межсайтового скриптинга (XSS):

  1. на основе DOM - часто запускается в браузере из-за недостатка JavaScript. Для использования уязвимости серверные вызовы не требуются.
  2. Отраженный XSS - полезная нагрузка отображается веб-сервером в теле HTML.
  3. Постоянный XSS - полезная нагрузка попадает в DB и встраивается в тело HTML веб-сервером.

Таким образом, вы не можете обратиться к XSS на основе DOM с помощью оболочки запросов, поскольку нет необходимости в запросе made.

Вы можете попытаться обратиться к пунктам 2 и 3, но обработка со значениями запроса является редкостью. Уязвимости XSS являются контекстно-зависимыми, и если вы попытаетесь закодировать или скрыться, не зная контекста, в котором значение будет использоваться позже, вы можете потерпеть неудачу.

Пожалуйста, просмотрите чит-код XSS предотвращение лист из OW ASP, чтобы узнать, как предотвратить XSS fl aws в коде.

...