我遇到了一个带有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特殊字符(如',“,ñ或'`')+限制此”安全发布“?
坦克!
答案 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}}
您可以根据需要进行修改。并使用上述链接的功能更新您的代码,以保护其免受新威胁的侵害。