使用php保护简单的所见即所得的最佳方法

时间:2011-08-31 09:38:22

标签: php security xss wysiwyg

我在我的网站上添加了一个简单的所见即所得编辑器。 (它只允许B / I / U - 不再)
我目前将所有内容存储为我的数据库中的html - 但是,添加<a onclick='...'>或其他恶意代码很简单

PHP中最好的方法是安全地解析输入? 如何将<b></b> <i></i>等实施为白名单并对其他所有内容进行编码?

2 个答案:

答案 0 :(得分:12)

HTMLPurifier

我只是把这个扔出去,可能会得到不可避免的抨击。我不会使用strip_tags来确保您的WYSIWYG形式...... 永远(除非您想要惹恼您的用户)。

它无法保护您的表单,并且您可能杀死您的用户体验。

Chris Shiftlett在他的博客文章中写了一篇精彩的段落

  

我厌恶评论博客,我的评论通过像strip_tags()这样的东西传递,有效地破坏了我想说的内容。它让我想起了使用IM客户端试图识别表情符号并用图像替换它们,这往往使得回复很难解读。

另一个原因

另一个答案中的其他人也写了这个我喜欢的内容:

  $str = "10 appels is <than 12 apples";
  var_dump(strip_tags($str));

我得到的输出是:

string '10 appels is ' (length=13)

我个人不会使用HTMLPurifier以外的任何

HTMLPurifier

HTMLPurifier

在此处试用演示:http://htmlpurifier.org/demo.php

看看这个similar question

答案 1 :(得分:0)

使用strip_tags()http://php.net/manual/en/function.strip-tags.php

  

string strip_tags(string $ str [,string $ allowable_tags])

第二个参数是允许标签列表;只列出'<b><i><u>',剩下的就会被删除。

请注意,如deceze所述:

  

此功能不会修改您的标签上的任何属性   允许使用allowable_tags,包括样式和onmouseover   恶意用户在发布文本时可能会滥用的属性   将向其他用户显示。

因此它本身并不能完全保护恶意代码!