原始HTML应该在输出或输入时进行消毒吗?

时间:2011-10-25 20:04:58

标签: xss sanitization

Data Santiziation上的CakePHP页面指出,应该在一个数据库中存储来自用户输入的原始HTML,并在输出时进行清理:

  

对于XSS的清理,通常最好将原始HTML保存在数据库中而不进行修改,并在输出/显示时进行清理。

为什么最好将(有潜在危险的)HTML存储在一个人的数据库中,只清理它以获得输出?在产生相同功能的同时,不会首先清理较小的存储空间吗?

我可以看到存储原始HTML的地方的唯一原因是,如果某些页面要清理输出,并且某些页面要么没有对输出进行限制,要么对其进行或多或少的严格要求。

2 个答案:

答案 0 :(得分:3)

我想到的一个重要原因是错误的数据污染。如果您要对传入的HTML应用过于激进的过滤器,它将永久损坏。您必须再次输入所有内容才能兑换。如果您对输出进行清理,则始终具有“原始”并可以根据需要调整过滤。

答案 1 :(得分:3)

您希望手动将原始数据保存在原始状态,以防止意外删除激进的清理脚本。

使用CakePHP时,您应该在视图中回显它时,使用系统中用户输入的所有上的h()快捷方式。

如果您正在使用Sanitize类,我建议您创建一个方法来清理记录并将此方法的调用放入模型的afterFind()回调中,并将其应用于返回的每个记录。如果不需要,您仍然可以根据需要调用数据的清理方法。