【发布时间】:2020-03-04 15:39:49
【问题描述】:
我目前正在开发一个使用 PHP(具体为 LAMP)的电子邮件模板构建网站,该网站允许用户粘贴其 HTML 电子邮件代码,然后将其发送给他们的客户。
显然,在处理此类数据时,我需要实现某种 XSS 安全性。几个星期以来,我一直在网上皱眉,试图找到解决方案,但发现的好方法很少,但它们实际上不适用于完整的 HTML 文档(这是我要处理的)。
这些是我找到的解决方案以及为什么它们对我不起作用:
HTMLPurifier:
我认为这对大多数人来说是显而易见的选择,因为它具有最好的安全性并且符合最新的行业标准。虽然它的主要用途应该是用于 HTML 片段/小型 sn-ps,但我想我会试一试。
我遇到的第一个问题是头部标签(以及其中的任何东西)被剥离和移除。头部在 HTML 电子邮件中非常重要,因此我必须找到解决方法……不幸的是,我能找到的唯一解决方法是将头部与电子邮件的其余部分分开,并通过 HTMLPurifier 单独运行每个部分。
我还没有尝试过,因为它看起来很hacky,但它似乎是实现我所追求的唯一方法。我也不确定 HTMLPurifier 在 CSS 中查找 XSS 的能力如何。最重要的是,它是一个如此庞大的库,在性能方面表现不佳。
HTMLawed:
HTMLawed 似乎是另一个不错的选择,但有几件事让我放弃了使用它。
A) 与 HTMLPurifier 相比,这似乎不太安全。 HTMLawed 目前有几个记录在案的安全问题。它还没有被广泛使用,这更令人担忧(只有大约 10 家注册公司使用)。
B) 它是根据 GPL/GPU 许可发布的,这实际上意味着我不能在我的网站上使用它,除非我愿意让人们免费使用我的服务。
C) 从我看到的人们谈论它的情况来看,它似乎去除了很多标签,除非它被大量配置。我在这里不能说太多,因为我没有尝试过,但这也引起了我的安全问题——如果我错过了什么怎么办?如果我不能配置它来保留我想要的元素怎么办?等等
这些是我要问你的问题:
- 是否有比上面列出的更好的替代品?
- 是否可以自己编写代码,还是过于雄心勃勃且太不安全?
- 较大的电子邮件公司如何解决这个问题(mailchimp、activecampaign、sendinblue 等)?
【问题讨论】:
-
你使用的是纯 PHP 还是 Laravel 之类的框架?
-
@THEWOLF 纯 PHP
-
对于您的 HTML Purifier 问题,这可能会对您有所帮助:stackoverflow.com/a/41510846/245790 - 虽然答案是“有可能,但需要大量工作”。我个人认为这是值得的(也许聪明的谷歌搜索会产生一个有人为你做这件事的 github 项目),但是 YMMV。祝你好运!
标签: php xss htmlpurifier