Недавно один из моих сотрудников опубликовал уязвимость на странице разработки. Это позволяет пользователю вставить 30 символов неэкранированного кода, который будет выполнен с фильтром |safe
. Таким образом, html небезопасные символы (<
, >
, '
, "
или &
) могут быть свободно вставлены в шаблон страницы.В чем опасность небезопасного ввода пользователем текста в Django?
Уязвимость существует в сообщении об ошибке в форме, поэтому он не позволяет хакеру редактировать то, что показано другим пользователям, только сам. Я хочу показать моему сотруднику опасность уязвимости с ужасающим примером. Кроме того, я лично заинтригован на профессиональном уровне в отношении того, что было бы самым худшим случаем с такой уязвимостью, как это было бы. Я знаю, что в PHP (возможно, в более старых версиях) это позволит пользователю отображать содержимое файлов сервера. Будет ли эта уязвимость позволять мне также показывать содержимое в файле настроек? Django Devs (благословить их) мудро выбрали, что {
не будет экранирован даже с фильтром |safe
. Поэтому он не может использоваться для отображения контекстных переменных.
Худшее, что я смог придумать самостоятельно, - это вставка (и исполнение) любого JS-файла, расположенного в любом месте в Интернете, что было бы ужасно, если это могло повлиять на других пользователей, но это не кажется, что плохо, если js-файл будет выполнен только для самого хакера.