2010-12-05 5 views

ответ

2

Дезинфекция HTML является довольно трудной задачей, чтобы получить право. Спамеры и другие неприятные люди придумывают новые способы контрабанды HTML через санитарию все время. Самый безопасный вариант - определить белый список безобидных тегов и строго отфильтровать все другие теги с помощью истинного HTML-парсера (не с регулярными выражениями).

На djangosnippets.com есть несколько шаблонных тегов и фильтров. this или this one. При выборе фильтра обратите внимание, что он использует белый список и парсер HTML, например lxml.html (предпочтительно lxml.html.clean) или BeautifulSoup.

1

Чтобы отобразить все HTML (не-вытекающее), вы можете использовать safe фильтр

{{ var|safe }} 

В вашем случае, если вы хотите избежать все, за исключением некоторых тегов, вы можете написать вам собственный фильтр, который делает это:

{{ var|mysafe }} 

Читайте об этом здесь: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/

алгоритм фильтра может быть:

  1. избежать все, что
  2. только те экранирования в теги, которые разрешены (с помощью .replace или regilar выражения)
2

Возможно, имеет смысл настроить TinyMCE таким образом, чтобы пользователь мог вводить только те элементы, которые вы ему разрешаете. Для этого TinyMCE имеет a powerful set of rules. Если вы используете django-tinymce, см. this для настройки TINYMCE_DEFAULT_CONFIG по вашему желанию.

+3

Злоумышленник должен будет отключить JavaScript (или использовать инструмент, который не интерпретирует JavaScript в первую очередь), чтобы обойти это препятствие. ** Никогда ** не полагайтесь только на проверку на стороне клиента. TIMEX попросил безопасности, и это вообще не обеспечивает никакой безопасности. – 2010-12-05 17:27:03

Смежные вопросы