Dezynfekcja HTML w danych formularza

Czy istnieje ogólny "dezynfekcja formularzy", którego mogę użyć, aby upewnić się, że wszystkie html/Skrypty zostaną usunięte z przesłanego formularza? forma.clean () wydaje się tego nie robić - znaczniki html są nadal w cleaned_data. Czy w rzeczywistości zrobienie tego wszystkiego ręcznie (i nadpisanie metody clean () dla formularza) jest moją jedyną opcją?

Author: abolotnov, 2011-04-13

3 answers

Django zawiera filtr szablonów o nazwie striptags, którego możesz użyć w szablonie:

value|striptags

Używa funkcji strip_tags, która mieszka w django.utils.html. Możesz go również użyć do czyszczenia danych formularza:

from django.utils.html import strip_tags
message = strip_tags(form.cleaned_data['message'])
 26
Author: Bernhard Vallant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-12 22:03:26

Strip_tags faktycznie usuwa znaczniki z wejścia, co może nie być tym, czego chcesz.

Aby przekonwertować łańcuch znaków na "Bezpieczny łańcuch" z nawiasami kątowymi, ampersandami i cudzysłowami przekonwertowanymi na odpowiednie encje HTML, możesz użyć filtra escape :

from django.utils.html import escape
message = escape(form.cleaned_data['message'])
 44
Author: simao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-18 14:28:43

Alternatywnie istnieje Biblioteka Pythona o nazwie bleach :

Bleach jest biblioteką dezynfekcji HTML i linkowania tekstowego opartą na białej liście. Jest przeznaczony do pobierania niezaufanych danych Użytkownika za pomocą jakiegoś HTML.

Ponieważ Bleach używa html5lib do parsowania fragmentów dokumentu tak samo jak przeglądarki, jest niezwykle odporny na nieznane ataki, znacznie bardziej niż sanityzery oparte na wyrażeniach regularnych.

Przykład:

import bleach
message = bleach.clean(form.cleaned_data['message'], 
                       tags=ALLOWED_TAGS,
                       attributes=ALLOWED_ATTRIBUTES, 
                       styles=ALLOWED_STYLES, 
                       strip=False, strip_comments=True)
 16
Author: Wtower,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-29 11:15:28