【问题标题】:How can I make HTML safe for web browser with python?如何使用 python 使 HTML 对 web 浏览器安全?
【发布时间】:2010-12-09 00:53:53
【问题描述】:

如何使用 python 使来自电子邮件的 HTML 安全地显示在 Web 浏览器中?

显示时不应遵循任何外部引用。换句话说,所有显示的内容都应该来自电子邮件,而不是来自互联网。

除垃圾邮件外,应尽可能接近作者的意图。

我想避免自己编写代码。

也可以接受需要最新浏览器 (firefox) 版本的解决方案。

【问题讨论】:

  • 您可能想澄清一下“安全”的确切含义。看起来你不想允许链接,但我想你也意味着你想免受 XSS 等的伤害。
  • 您对基于网络的电子邮件阅读器有什么期望?我对越来越安全的解决方案和不太安全的解决方案都感兴趣。

标签: python html email browser html-sanitizing


【解决方案1】:

我不太清楚你所说的“安全”到底是什么意思。这是一个相当大的话题......但是,它的价值:

在我看来,ActiveState Cookbook 中的stripping parser 是最简单的解决方案之一。您几乎可以复制/粘贴该类并开始使用它。

也看看 cmets。最后一个声明它不再工作了,但我也在某个应用程序中运行它并且它工作正常。由于工作原因,我无法使用那个盒子,所以我必须在周末查看它。

【讨论】:

  • 正如评论者在该页面上所说,只需确认脚本确实不再留下有效标签。
【解决方案2】:

html5lib 包含一个 HTML+CSS 清理程序。它目前允许的太多了,但修改它以匹配用例应该不会太难。

here找到它。

【讨论】:

    【解决方案3】:

    使用 HTMLparser 模块,或安装 BeautifulSoup,并使用它们来解析 HTML 并禁用或删除标签。这将保留那里的任何链接文本,但不会突出显示并且不可点击,因为您正在使用 Web 浏览器组件显示它。

    您可以通过将 <A></A> 替换为 <SPAN></SPAN> 并更改文本装饰以显示链接的位置来更清楚地说明所做的事情。可能与正常不同的蓝色阴影和虚线下划线表示破损。这样你就更接近于按预期显示它,而不会误导人们点击不可点击的东西。您甚至可以在Javascriptpure CSS 中添加悬停,弹出一个工具提示,说明出于安全原因已禁用链接。

    可以使用<IMG></IMG> 标记完成类似的操作,包括将它们替换为空白矩形,以确保页面布局接近原始。

    我用Beautiful Soup 做过类似的事情,但是HTMLparser 包含在Python 中。在较旧的 Python 发行版中,有一个 htmllib 现在已弃用。由于电子邮件中的 HTML 可能不完全正确,请使用 Beautiful Soup 3.0.7a,它更擅长理解损坏的 HTML。

    【讨论】:

    • 可点击的链接不是问题。通常自动获取的图像和其他参考是。
    • 一个合适的 HTML 解析器确实是一个好的开始。但请务必使用可接受标签及其可接受属性的白名单,并删除其他所有内容。黑名单方法可能很容易绕过:有比您想象的更多潜在危险/包含外部内容的标签,特别是考虑到跨浏览器的差异。此外,如果您需要允许样式,您将面临一项艰巨的 CSS 解析任务,即只允许已知良好的属性。
    • 这就是为什么我更喜欢现有的解决方案而不是自己做。
    猜你喜欢
    • 2014-09-22
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多