strip_tags + htmlentities +特殊的textarea与WYSIWYG编辑器

时间:2011-09-06 07:59:44

标签: php textarea

我遇到了一个带有WYSING编辑器(简单)的textarea输入有问题,DB /行是UTF8_general_ci,现在我用这个设置模板中的html文本:

htmlentities(utf8_decode($row['field'])

问题是WYSING编辑器,如果用户放了<strong> <P>或类似的,模板中的文本显示是标签的字符串代码,而不是代码,因为我使用了htmlentities,但是如果我没有使用它,并显示原始文本,问题是“特殊标签”,例如<script>, <iframe>

对此的解决方案是使用strip_tags(),仅允许用于编辑器..但是一个问题仍然存在于此...如果用户使用例如<p onclick="alert('fckoff!')">HELLO!</p>,警报显示是因为它允许的HTML标记。

存在,任何方法,只允许某些标签+防止scape特殊字符(如',“,ñ或'`')+限制此”安全发布“?

坦克!

2 个答案:

答案 0 :(得分:0)

你可以使用正则表达式来删除任何你不想要的内容。

例如,要删除onclick js事件,您可以执行以下操作:

$field = preg_replace('/onclick=\"[^"]*\"/', '', $field);

您需要多个标签:

$field = preg_replace('/(onclick|onload|onwhatever|...)=\"[^"]*\"/', '', $field);

答案 1 :(得分:0)

当你使用自定义CMS / Framework这是一件非常复杂的事情时,我建议你从像CodeIgniter这样的框架中复制函数,在这里你会找到一个好的代码(public function xss_clean){{ 3}}

您可以根据需要进行修改。并使用上述链接的功能更新您的代码,以保护其免受新威胁的侵害。