XSS - атаки часто применяются для кражи информации из cookie и сеансов или для того, чтобы обманом выкрасть у пользователя конфиденциальную информацию.
В двух словах, атака методом межсайтового скриптинга возможна в том случае когда веб-приложение не экранирует полученные от пользователя данные перед вставкой их в HTML-разметку. В результате хацкер получает возможность поместить в произвольный HTML-код что угодно, например тег <script>…
Например, наш метод содержит такие строки:
name = request.GET.get('name')
return HttpResponse('<h1>Hello {} </h1>'.format(name))
Вот так мы получим имя из параметра GET-запроса и вставим его в HTML-разметку. Но на самом деле, мы допустили возможность вставить в нашу HTML-разметку что угодно. Не делайте так, это грубейшая ошибка!
Просто представьте что будет, в случае если переменная name из примера выше будет равна
</h1><br /><h1> Вас взломали
Можете проверить ;)
Кроме того, такая атака применялась, чтобы заставить пользователя ввести данные на странице, которая выглядит в точности, как веб-страница соц.сети, но на самом деле содержит поддельную форму, отправляющую данные о странице пользователя хацкеру.
Кроме того, данные могут быть доступны в базе данных, и при определенном сценарии отобразиться на сайте. Был реальный случай когда пользователь вставил в свой профиль javascript-код, который автоматически добавлял его в список друзей любого, кто просматривал его профиль.
Более того, найденная уязвимость открывала кучу возможностей: удаление всех учетных записей, изменение их профилей и т.д.
Для защиты от этой атаки система шаблонов Django автоматически экранирует значение всех переменных.
В примере ранее мы использовали
return HttpResponse('<h1>Hello {} </h1>'.format(name))
Но это было не правильно, и лучше было бы заменить эту строку на
return render_to_response('index.html', {'name': name})