PHP-针对XSS保护用户完整的HTML文件

时间:2019-11-08 01:35:38

标签: php xss htmlpurifier

我目前正在使用PHP(具体来说是LAMP)构建电子邮件模板网站,该网站允许用户粘贴HTML电子邮件代码,然后将其发送给客户。

显然,在处理此类数据时,我需要实现某种XSS安全性。数周以来,我一直在努力寻找解决方案,发现很少有好的方法,但是它们不能真正用于完整的HTML文档(这就是我要处理的内容)。

这些是我找到的解决方案,以及为什么它们对我不起作用:

HTMLPurifier

我认为对于大多数人来说,这是显而易见的选择,因为它具有最佳的安全性,并且符合行业标准。尽管它的主要用途应该是用于HTML片段/小片段,但我想我还是会尝试一下。

我遇到的第一个问题是头部标签(以及其中的任何东西)被剥夺并被移除。头在HTML电子邮件中非常重要,因此我必须找到解决方法...不幸的是,我唯一能找到的解决方法是将头与电子邮件的其余部分分开,并通过HTMLPurifier分别运行每个部分。

我还没有尝试过,因为它看起来很hacky,但这似乎是实现我所追求的唯一方法。我也不确定HTMLPurifier在CSS中找到XSS的能力。最重要的是,它这么大的库在性能方面表现不佳。

HTMLawed

HTMLawed似乎是另一个不错的选择,但是有一些事情使我无法使用它。

A)与HTMLPurifier相比,这似乎不太安全。 HTMLawed目前有一些已记录在案的安全性问题。它也没有被广泛使用,而这更令人担忧(仅大约10家注册公司使用了。)

B)它是根据GPL / GPU许可发布的,这实际上意味着除非愿意让人们免费使用我的服务,否则我无法在我的网站上使用它。

C)从我所看到的人们谈论它的角度来看,除非对其进行大量配置,否则似乎会剥离很多标签。我在这里没有太多发言权,因为我还没有尝试过,但这也给我带来了安全隐患-如果我错过了什么该怎么办?如果我无法对其进行配置以保留所需元素怎么办?等


这些是我要问的问题:

  1. 上面列出的替代品还有更好的替代品吗?
  2. 是否可以自己编写代码,还是太雄心勃勃又太不安全?
  3. 大型电子邮件公司如何解决此问题(mailchimp,activecampaign,sendinblue等)?

1 个答案:

答案 0 :(得分:-2)

似乎您正在发送HTML内容。因此,您将无法过滤它们。您必须将HTML存储在数据库中。如果使用XSS证明过滤它们,则HTML将无法正常工作。默认情况下,所有Webmail服务默认都会禁用Javascript,例如GMail,Yahoo,Roundcube等。

如果您使用像CKEditor这样的WYSIWYG,它将自动删除所有<script>标签以及某些未知属性。但是您仍然可以通过CKEditor.config()将其设置为接受和删除的内容。

如果PHP由于某些特殊字符而无法插入数据库,则可以使用SQL prepare语句或使用base64_encode()将HTML输入编码为base64,然后在mail()中使用时对其进行解码,或者PHPMailer::Body

相关问题