Неанимированный входной сигнал от HTTP-параметра поступает в django.http.HttpResponse

В моем проекте на python (django) есть следующий фрагмент кода

  someError = request.GET.get('error', None)

        if someError is not None:
            self.logger.exception(f'Authorization failed with error: {someError}')
            return HttpResponse(f'Authorization failed with error: {someError}')

Код работает нормально, однако при запуске запланированного сканирования Snyk выдает следующее сообщение

Информация: Несанированный входной сигнал от HTTP-параметра поступает в django.http.HttpResponse, где он используется для рендеринга HTML-страницы возвращаемой пользователю. Это может привести к атаке межсайтового скриптинга (XSS).

Я провел некоторое исследование и попытался преобразовать объект someError в строку, но он все равно жалуется на это. Может ли кто-нибудь сообщить мне, как обезвредить ошибку? Заранее спасибо

Это тривиальный пример, но он послужит хорошим кратким объяснением. Представьте, что у вас есть пользователь, чей Request был перехвачен на стороне клиента с помощью межсайтового скрипта. Злоумышленник изменяет Request, чтобы отправить свою собственную полезную нагрузку. Поскольку вы получаете эту полезную нагрузку и возвращаете ее клиенту в неизменном виде, клиент становится уязвимым для атаки, когда полезная нагрузка получена браузером клиента. Это называется атакой межсайтового скриптинга.

Вы получили эту уязвимость на своем сервере, сделав следующее:

someError = request.GET.get('error', None)
    •••Rest of code•••
    return HttpResponse(f'Authorization failed with error: {someError}')

Вы отправляете параметр метода URL GET 'error' как есть без какой-либо проверки или санации.

Снык должен предупредить вас об этом, потому что это может быть легко использовано. Не доверяйте пользовательскому вводу. Даже не предполагайте ничего о пользовательском вводе. Проводите валидацию, санацию и все остальное, что вы можете сделать, чтобы быть спокойным.

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

Вернуться на верх