如何用Python确保HTML在网页浏览器中安全?

1 投票
3 回答
1452 浏览
提问于 2025-04-15 15:16

我该如何用Python把电子邮件中的HTML内容安全地显示在网页浏览器里呢?

在显示的时候,任何外部链接都不应该被打开。换句话说,所有显示的内容都应该来自电子邮件,而不是来自互联网。

除了垃圾邮件之外,其他邮件的内容应该尽量和写邮件的人想要表达的一样显示出来。

我希望能避免自己编写代码。

需要最新版本浏览器(比如火狐)的解决方案也是可以接受的。

3 个回答

0

可以使用HTMLparser模块,或者安装BeautifulSoup,然后用它们来解析HTML,禁用或移除标签。这样做会保留原本的链接文字,但它不会被高亮显示,也无法点击,因为你是通过网页浏览器组件来展示的。

为了让这个过程更清楚,可以把<A></A>替换成<SPAN></SPAN>,并改变文字的样式,让人知道原来的链接在哪里。比如,可以用一种不同于正常链接的蓝色,配上虚线下划线,表示这个链接已经失效。这样做可以让你更接近原本的展示效果,同时又不会误导人们去点击那些不可点击的内容。你甚至可以在页面上添加一个悬停效果,使用Javascript或者纯CSS,弹出一个提示框,解释链接因安全原因已被禁用。

对于<IMG></IMG>标签也可以做类似的处理,比如用一个空白矩形替代,以确保页面布局尽量接近原来的样子。

我之前用过Beautiful Soup做过这样的事情,但HTMLparser是Python自带的。在旧版的Python中,有一个htmllib,但现在已经不再使用了。由于电子邮件中的HTML可能不完全正确,建议使用Beautiful Soup 3.0.7a,它更擅长处理那些有问题的HTML。

1

我不太明白你说的“安全”具体指什么。这是个挺大的话题……不过,我可以分享一些我的看法:

在我看来,来自ActiveState Cookbook的剥离解析器是最简单的解决方案之一。你几乎可以直接复制粘贴这个类,然后就可以开始使用了。

也可以看看评论区。最后一条评论说这个不再好用了,但我在某个应用里用这个还是没问题的。因为工作原因,我现在无法访问那个环境,所以我得等到周末再查一下。

1

html5lib 是一个包含 HTML 和 CSS 清理工具的库。现在它允许的内容有点多,但其实修改它让它更符合你的需求并不难。

我是在 这里 找到这个信息的。

撰写回答