#javascript #python #django #xss
#javascript #python #django #xss
Вопрос:
Я новичок в Django, и в моем приложении Django у меня есть модель, которая содержит основную информацию о транспортном средстве (название, модель, марка, год выпуска). Я добавляю информацию через форму. Проблема в том, что если пользователь должен ввести «alert(«ошибка»)», тогда форма разрешит это, и оно будет сохранено как действительный ввод. Поэтому, когда страница обновляется, на странице появится предупреждение, и поле теперь будет пустым. Как запретить пользователю вводить JavaScript в поле символов?
У меня нет ‘autoescape off’ нигде в базе кода, и я не использую ключевое слово ‘safe’ в html. У меня нет проверки ‘def clean’ для такого ввода, поскольку у меня сложилось впечатление, что Django позаботится о такой инъекции. Заранее спасибо!
Комментарии:
1. Используете ли вы шаблоны Django? Если нет, то как преобразовать данные из пользователя / базы данных в текст на экране?
2. @HenryWoody Я использую шаблоны Django, и странно то, что я вижу предупреждение, когда отображаю его в одной из моих таблиц данных. У меня есть несколько таблиц, но только одна показывает предупреждение. Мне также сообщили, что мой вызов ajax имеет флаг «ProcessData: false» и, следовательно, не экранирует вывод.
Ответ №1:
Это совершенно корректный ввод. Но это не приведет к появлению предупреждения на странице — потому что Django автоматически экранирует вывод.
Комментарии:
1. Дело в том, что предупреждение отображается, но не везде. Только когда одна из моих таблиц данных содержит скрипт. Я упомянул @HenryWoody, что мне также сообщили, что это может быть связано с тем, что мой вызов ajax, который сохраняет информацию в базе данных, имеет значение флага «ProcessData: false» и, следовательно, не кодирует данные и приводит к отображению предупреждения скрипта. Мой обходной путь на данный момент заключается в явном вызове функции escape() для переменной со сценарием оповещения.
Ответ №2:
Это можно решить с помощью функций strip_tags()
попробуйте это
from django.utils.html import strip_tags
string_value = "<b>Iam </b> <button>Nancy</button> moree. <span>Thanks</span>"
sanitize_value = strip_tags(string_value)
print(sanitize_value)
Примечание:
Если вы используете strip_tags()
, то вам следует обновить свой django как минимум до версий Django 1.6 и 1.7 и выше. Это связано с тем, что эксперты по безопасности нашли способ обойти strip_tags в версии django ниже версии 1.6. см
Решение 2:
Если вы используете шаблоны django, вы также можете попробовать этот фильтр шаблонов striptags() на ваш взгляд.
{{ value|striptags }}
если значение равно "<b>Iam </b> <button>Nancy</button> moree. <span>Thanks</span>"
результатом будет «Я Нэнси Мори. Спасибо «.
решение 3:
вы также можете очистить библиотеку python с помощью метода clean() источник