2010-06-03 98 views
2

我有一个用户表单,它允许用户提交HTML格式的数据。 html本身受到PHP strip_tags的限制,但当然不会完成检查等。想要'沙盒'用户表单提交HTML

我的基本问题是,如果用户留下标签未关闭,例如<a>标签,那么以下所有内容,包括随后的页面内容在用户内容显示区域“外部”,现在可能会变形。

检查正确的标记完成是我会看到的一个解决方案,但理想情况下,我想以某种方式防止用户HTML化内容远离网站的其他部分。

回答

2

使用HTML Purifier。非常彻底和易于使用的独立插件。它确保所有标记都是有效的XHTML,并且还可以防止XSS攻击。

我建议在用户的数据库中保存两份用户的HTML输入。一个副本将是他们提交的原始表单,稍后他们可以使用它们来编辑页面,第二个副本将由输出时显示的HTML Purifier消毒。存储清理版本比在每次页面加载时运行HTML Purifier要快得多。

+0

这是完美的,谢谢你的建议! – 2010-06-07 03:04:32

2

实现完全隔离的唯一方法是使用iframe

另一种解决方案是限制用户可以使用的html标签。将用户限制为段落和内嵌标签(stringem,a等)将确保您可以将所有内容封装在div标签中,而不必担心打开的标签。

+0

不幸的是我试过用div标签包装内容,但无论如何它都会“溢出”。 – 2010-06-03 18:42:43

+0

检查用户提交的内容是否使用div(其他其他块级别的标签),这可能会导致包装div问题。如果不是,那么可能会有不幸的事情与你的HTML不一致。我会开始玩你的CSS(把红色的边框和固定/围绕你的div的高度)来隔离问题。 – 2010-06-03 18:47:50

+0

嗯,你确定?我想一个简单的例子,我看到了溢出的问题... [开始代码]

This is a test
这一点与[结束码] 上面的代码导致该问题。 – 2010-06-03 20:52:45