Санитарная обработка HTML в отправленных данных формы - PullRequest
29 голосов
/ 13 апреля 2011

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

Ответы [ 3 ]

47 голосов
/ 23 августа 2011

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

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

from django.utils.html import escape
message = escape(form.cleaned_data['message'])
29 голосов
/ 13 апреля 2011

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

value|striptags

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

from django.utils.html import strip_tags
message = strip_tags(form.cleaned_data['message'])
18 голосов
/ 29 мая 2015

Кроме того, есть библиотека 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)
...