Фильтр шаблонов Django: санация HTML и встраивание YouTube, Vimeo и т. Д.? - PullRequest
3 голосов
/ 26 июля 2011

У меня есть контент, введенный пользователем (в настоящее время введен в Markdown), и я хочу разрешить пользователям вставлять видео YouTube, vimeo и т. Д.Так или иначе, мне нужно разрешить определенные теги object, param и embed, в то же время блокируя другие.

В настоящее время я выполняю очистку HTML с помощью белого списка.Я понимаю, что мог бы настроить белый список, чтобы он специально разрешал объекты, указывающие на определенные URL-адреса, но написание этого для всех различных видов онлайн-сервисов кажется кошмаром обслуживания.

Вот моя логика.У нас есть Markdown, который по своей природе (в основном) безопасен.Помимо злонамеренно введенного содержимого в Markdown, фактические теги, отображаемые Markdown, гарантированно безопасны, поэтому, например, если я запускаю вывод через oembed или видеофильтр , эти созданные теги будут безопасными.Так что, если бы я мог как-то узнать, что эти сгенерированные теги были безопасными, а затем только лишить других, это решило бы проблему.Я просто не уверен, какой будет зацепка.

Мне интересно, есть ли уже простой способ сделать это в Python или мне нужно придумать какой-нибудь умный взлом.

1 Ответ

2 голосов
/ 26 июля 2011

Что вам нужно сделать, это проверить, что уценка безопасна, посмотрите на отбеливатель , а затем пропустите ее через уценку:

bleached = bleach.clean(user_input, tags=bleach.ALLOWED_TAGS + ['object', 'param', 'embed'], strip=True)
output = markdown(bleached)

Дополнительно, django-janior похоже, что это может быть полезно.

...