Неанимированный входной сигнал от 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'
как есть без какой-либо проверки или санации.
Снык должен предупредить вас об этом, потому что это может быть легко использовано. Не доверяйте пользовательскому вводу. Даже не предполагайте ничего о пользовательском вводе. Проводите валидацию, санацию и все остальное, что вы можете сделать, чтобы быть спокойным.
ОП не является производственным кодом, и мой пример не является примером реального мира, но примеры реального мира хуже, и мы должны постоянно напоминать себе, что мир - это не ложе из роз, так что оставайтесь в безопасности.