strip_tags + htmlentities +特殊文本区与WYSING编辑器


strip_tags + htmlentities + special in textarea with WYSING editor

我有一个麻烦的文本区输入有一个WYSING编辑器(简单),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标签。

存在,任何方法,只允许某些标签+防止特殊字符(如',',ñ,或' ' ')+限制此"安全问题"?

坦克!

您可以使用正则表达式创建一个函数来删除任何您不想要的内容。

例如,要删除onclick js事件,你可以这样做:
$field = preg_replace('/onclick='"[^"]*'"/', '', $field);

对于多个标签,您可以:

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

由于您使用的是自定义CMS/框架,因此这是一件非常复杂的事情,我建议您从CodeIgniter等框架中复制功能,在这里您会发现一个很好的代码(public function xss_clean) https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Security.php

你可以根据你的需要修改它。并保持您的代码更新与上述链接的功能,以确保免受新的威胁。

相关文章: