Рефакторинг этого кода, чтобы не помещать испорченные, контролируемые пользователем данные в заголовок - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь добавить пользовательский заголовок в мой HTTPHeader, как показано ниже

Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
    String headerName = headerNames.nextElement();
    if (headerName.equalsIgnoreCase("SampleHeader"){
        headers.add(headerName, request.getHeader(headerName));
    }
}

, но я получаю ошибку ниже при запуске сонара.

"Рефакторинг этого кода, чтобы не ставить испорченный контролируемые пользователем данные в заголовке. "

Я думаю, что добавление регулярного выражения может решить мою проблему, но у меня было две проблемы.

  1. Мне нужно написать регулярное выражение, которое разрешить алфавиты, цифры и. ! - _ Но я не могу его создать.
  2. Я не уверен, что проверка с использованием некоторого регулярного выражения в конечном итоге решит мою проблему.

1 Ответ

0 голосов
/ 29 апреля 2020

Проблема в том, что вы используете имя заголовка («SampleHeader») для принятия логического решения в вашем коде.

Данные, предоставленные пользователем, такие как параметры URL, полезные данные POST или файлы cookie, всегда должны рассматриваться как ненадежные и испорченные. Приложения, регистрирующие испорченные данные, могут позволить злоумышленнику ввести символы, которые нарушат шаблон файла журнала. Это может быть использовано для блокировки мониторов и систем SIEM (информация о безопасности и управление событиями) от обнаружения других вредоносных событий.

В этом случае, если я хочу обмануть вашу программу, добавив новый заголовок в список headers Мне просто нужно отправить скручивание следующим образом:

curl -X GET http://localhost/your/path --header 'SampleHeader: someValue'  

Эту проблему можно решить, очистив предоставленные пользователем данные перед их регистрацией.

Что SonarQube пытается вам сказать, так это Вы выставляете свои логи c на вход от клиентов. Лучшим решением будет рефакторинг вашего кода, чтобы он не зависел от указанного c заголовка от клиента для выполнения какого-либо действия. Трудно предложить пример кода, не видя немного больше кодовой базы.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...