2009-10-22 8 views
1

Как я могу сделать HTML из электронной почты безопасным для отображения в веб-браузере с помощью python?Как я могу сделать HTML безопасным для веб-браузера с помощью python?

Любые внешние ссылки не должны соблюдаться при отображении. Другими словами, весь отображаемый контент должен поступать из электронной почты и ничего из Интернета.

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

Я хотел бы избежать кодирования этого самостоятельно.

Решения, требующие последней версии браузера (firefox), также приемлемы.

+1

Возможно, вы захотите уточнить, что вы подразумеваете под «безопасным». Похоже, вы хотите не разрешать ссылки, но я полагаю, вы также подразумеваете, что хотите быть в безопасности от XSS и т. Д. –

+0

Что бы вы ожидали от веб-читателя электронной почты? Меня интересуют как более, так и менее безопасные решения. – iny

ответ

1

html5lib содержит дезинфицирующее средство для HTML + CSS. Это позволяет слишком много в настоящее время, но не должно быть слишком сложно изменить его, чтобы соответствовать варианту использования.

Найдено here.

0

Используйте модуль HTMLparser или установите BeautifulSoup и используйте те, которые нужно проанализировать HTML и отключить или удалить теги. Это приведет к тому, что текст ссылки будет отсутствовать, но он не будет выделен, и он не будет доступен для кликов, поскольку вы показываете его с помощью компонента веб-браузера.

Вы можете прояснить, что было сделано, заменив <A></A> на <SPAN></SPAN> и изменив оформление текста, чтобы показать, где была ссылка. Возможно, другой оттенок синего цвета, чем обычно, и пунктирный знак подчеркивания. Таким образом, вы немного ближе к тому, чтобы отображать его по назначению, фактически не вводя в заблуждение людей, чтобы нажимать на то, что не доступно для кликов. Вы даже можете добавить зависание в Javascript или pure CSS, в котором появляется всплывающая подсказка, поясняющая, что ссылки были отключены по соображениям безопасности.

Аналогичные вещи можно сделать с помощью тегов <IMG></IMG>, включая замену их пустым прямоугольником, чтобы макет страницы был близок к оригиналу.

Я сделал такие вещи как Beautiful Soup, но HTMLparser включен в Python. В более старых дистрибутивах Python существовал htmllib, который теперь устарел. Поскольку HTML в сообщении электронной почты может быть не совсем корректным, используйте Beautiful Soup 3.0.7a, который лучше разбирается в сломанном HTML.

+0

Доступные ссылки не являются проблемой. Изображения и другие ссылки обычно выбираются автоматически. – iny

+0

Правильный парсер HTML действительно хороший старт. Но обязательно работайте с белым списком приемлемых тегов и их приемлемых атрибутов и удалите все остальное.Подход с черным списком, вероятно, будет легко обойти: есть много других потенциально опасных/внешних контента, включая теги, чем вы думаете, особенно учитывая различия между браузерами. Также, если вам нужно разрешить стили, перед вами перед вами сложная задача синтаксического анализа CSS, чтобы разрешить только хорошо известные свойства. – bobince

+1

Вот почему я предпочел бы существующее решение вместо того, чтобы делать это сам. – iny

1

Я не совсем понимаю, что именно вы подразумеваете под «безопасным». Это довольно большая тема ... но, для чего это стоит:

На мой взгляд, stripping parser из Аквапарка ActiveState - одно из самых простых решений. Вы можете в значительной степени скопировать/вставить класс и начать его использовать.

Посмотрите также на комментарии. В последнем говорится, что он больше не работает, но у меня также есть работа в приложении где-то, и он работает нормально. С работы у меня нет доступа к этому ящику, поэтому мне придется искать его в выходные.

+0

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

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

  • Нет связанных вопросов^_^