Подтвердить что ты не робот

Санитарный анализ HTML в представленных данных формы

Существует ли общий "дезинфицирующее средство для форм", которое я могу использовать для обеспечения того, чтобы все html/scripting были удалены из представленной формы? form.clean(), похоже, ничего не делает - теги html все еще находятся в cleaned_data. Или, действительно, все это вручную (и переопределить метод clean() для формы) является моей единственной опцией?

4b9b3361

Ответ 1

Django поставляется с фильтром шаблонов striptags, который можно использовать в шаблоне:

value|striptags

Он использует функцию strip_tags, которая живет в django.utils.html. Вы также можете использовать его для очистки данных формы:

from django.utils.html import strip_tags
message = strip_tags(form.cleaned_data['message'])

Ответ 2

strip_tags фактически удаляет теги из ввода, которые могут быть не такими, какие вы хотите.

Чтобы преобразовать строку в "безопасную строку" с угловыми скобками, амперсанды и кавычки, преобразованные в соответствующие объекты HTML, можно использовать escape фильтр:

from django.utils.html import escape
message = escape(form.cleaned_data['message'])

Ответ 3

В качестве альтернативы существует библиотека Python под названием bleach:

Bleach - это белая версия HTML-системы санитаризации и текстовой привязки. Он предназначен для получения ненадежного ввода пользователем некоторого HTML-кода.

Поскольку Bleach использует html5lib для разбора фрагментов документа так же, как это делают браузеры, он чрезвычайно устойчив к неизвестным атакам, намного больше, чем дезинфицирующие средства на основе регулярных выражений.

Пример:

import bleach
message = bleach.clean(form.cleaned_data['message'], 
                       tags=ALLOWED_TAGS,
                       attributes=ALLOWED_ATTRIBUTES, 
                       styles=ALLOWED_STYLES, 
                       strip=False, strip_comments=True)