Должен ли html быть санирован при вводе?

Этот вопрос уже задавался здесь довольно много раз, и большинство всех согласны с тем, что необработанный ввод HTML должен храниться в базе данных и избегаться при выводе. Тем не менее, я думаю, что мой случай может быть немного другим.

Пользователь может вводить некоторые теги (em, strong, span и т. Д.), Но другие удаляются (скрипт, стиль, мета и т. Д.). Поэтому я беру необработанный HTML и отправляю его через bleach.clean убрать (не убежать) все небезопасные теги. Для меня это больше похоже на валидацию / дезинфекцию, а не на экранирование контента для отображения. Тем более, что независимо от того, в каком формате я обслуживаю данные (HTML, JSON или любой другой формат), я бы удалял небезопасные теги.

Должен ли я все еще санировать его на выходе или это тот случай, когда лучше сделать это на входе?

Бонусный вопрос:

Если это правильный подход для этого сценария, каков наилучший способ реализовать его в django? Проверка на уровне формы или на уровне модели?

1 ответ

Когда дело доходит до санитарии, не существует такой вещи, как слишком много. Вы всегда должны очищать ВСЕ пользовательские входы ДО того, как они будут вставлены в базу данных, чтобы обезопасить сам HTML, а также для защиты от любых атак SQL-инъекций. Не мешает выполнить дополнительную проверку и очистить вывод, когда он выходит из базы данных и помещается на веб-страницу.

Другие вопросы по тегам