在Data Santiziation上的CakePHP页面指出,应该在一个数据库中存储来自用户输入的原始HTML,并在输出时进行清理:
对于XSS的清理,通常最好将原始HTML保存在数据库中而不进行修改,并在输出/显示时进行清理。
为什么最好将(有潜在危险的)HTML存储在一个人的数据库中,只清理它以获得输出?在产生相同功能的同时,不会首先清理较小的存储空间吗?
我可以看到存储原始HTML的地方的唯一原因是,如果某些页面要清理输出,并且某些页面要么没有对输出进行限制,要么对其进行或多或少的严格要求。
答案 0 :(得分:3)
我想到的一个重要原因是错误的数据污染。如果您要对传入的HTML应用过于激进的过滤器,它将永久损坏。您必须再次输入所有内容才能兑换。如果您对输出进行清理,则始终具有“原始”并可以根据需要调整过滤。
答案 1 :(得分:3)
您希望手动将原始数据保存在原始状态,以防止意外删除激进的清理脚本。
使用CakePHP时,您应该在视图中回显它时,使用系统中用户输入的所有上的h()快捷方式。
如果您正在使用Sanitize类,我建议您创建一个方法来清理记录并将此方法的调用放入模型的afterFind()回调中,并将其应用于返回的每个记录。如果不需要,您仍然可以根据需要调用数据的清理方法。