Существует ли библиотека Python с открытым исходным кодом для очистки HTML и удаления всего Javascript? - PullRequest
4 голосов
/ 06 декабря 2009

Я хочу написать веб-приложение, которое позволяет пользователям вводить любой HTML-код, который может находиться внутри элемента <div>. Затем этот HTML-код будет отображаться другим пользователям, поэтому я хочу убедиться, что сайт не открывает людей для атак XSS.

Есть ли в Python хорошая библиотека, которая будет очищать все атрибуты обработчика событий, <script> элементы и другие фрагменты Javascript из HTML или дерева DOM?

Я собираюсь использовать Beautiful Soup для упорядочения HTML-кода, чтобы он не содержал закрытых тегов и тому подобного. Но, насколько я могу судить, у него нет предварительно упакованного способа убрать весь Javascript.

Если на каком-то другом языке есть хорошая библиотека, это тоже может сработать, но я бы действительно предпочел Python.

Я много раз искал в Google и охотился на pypi, но не смог найти ничего очевидного.

Относящиеся

Ответы [ 5 ]

5 голосов
/ 06 декабря 2009

Как отмечает Клаус, ясное согласие в сообществе заключается в использовании BeautifulSoup для следующих задач:

soup = BeautifulSoup.BeautifulSoup(html)
for script_elt in soup.findAll('script'):
    script_elt.extract()
html = str(soup)
4 голосов
/ 06 декабря 2009

Белый список подходов к разрешенным тегам, атрибутам и их значениям является единственным надежным способом. Взгляните на Рецепт 496942: защита межсайтовых скриптов (XSS)

Что не так с существующими языками разметки, которые используются на этом сайте?

0 голосов
/ 07 декабря 2009

Эрик

Задумывались ли вы об использовании синтаксического анализатора типа 'SAX' для HTML? Я действительно не уверен хотя это будет игнорировать события должным образом, хотя. Это также было бы немного сложнее построить, чем использовать что-то вроде Beautiful Soup. Обработка синтаксических ошибок также может быть проблемой с SAX.

Что мне нравится делать в подобных ситуациях, так это создавать объекты python (подклассы из класса XML_Element) из проанализированного HTML. Затем удалите все нежелательные объекты из дерева и, наконец, повторно сериализуйте объекты обратно в HTML. Это не так сложно в питоне.

С уважением,

0 голосов
/ 06 декабря 2009

Я бы честно посмотрел на использование чего-то вроде bbcode или другой альтернативной разметки.

0 голосов
/ 06 декабря 2009

Вы можете использовать BeautifulSoup . Это позволяет довольно легко проходить структуру разметки, даже если она не правильно сформирована. Я не знаю, что есть что-то сделанное на заказ, которое работает только с тегами сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...