Должен ли html быть санирован при вводе?
Этот вопрос уже задавался здесь довольно много раз, и большинство всех согласны с тем, что необработанный ввод HTML должен храниться в базе данных и избегаться при выводе. Тем не менее, я думаю, что мой случай может быть немного другим.
Пользователь может вводить некоторые теги (em, strong, span и т. Д.), Но другие удаляются (скрипт, стиль, мета и т. Д.). Поэтому я беру необработанный HTML и отправляю его через bleach.clean
убрать (не убежать) все небезопасные теги. Для меня это больше похоже на валидацию / дезинфекцию, а не на экранирование контента для отображения. Тем более, что независимо от того, в каком формате я обслуживаю данные (HTML, JSON или любой другой формат), я бы удалял небезопасные теги.
Должен ли я все еще санировать его на выходе или это тот случай, когда лучше сделать это на входе?
Бонусный вопрос:
Если это правильный подход для этого сценария, каков наилучший способ реализовать его в django? Проверка на уровне формы или на уровне модели?
1 ответ
Когда дело доходит до санитарии, не существует такой вещи, как слишком много. Вы всегда должны очищать ВСЕ пользовательские входы ДО того, как они будут вставлены в базу данных, чтобы обезопасить сам HTML, а также для защиты от любых атак SQL-инъекций. Не мешает выполнить дополнительную проверку и очистить вывод, когда он выходит из базы данных и помещается на веб-страницу.