我正在研究使用Smarty模板系统对Codigniter中的内容进行消毒的最佳标准
查看文档,我们被告知对输出而不是输入进行消毒。 https://www.codeigniter.com/user_guide/general/common_functions.html#html_escape
不同的文章说使用html_escape()并在输出之前晚使用它,但是我可以看到在早晚进行此操作的利弊。
在灵巧解析之前晚使用它可能会导致一些内置字符串出现问题,例如使用<br>
的多行地址。
更聪明的解析之后甚至还会导致使用默认文本的探针,例如{$ var.name | default:'未设置'}。
您不能在此使用nofilter选项,因为$ var.name可能是恶意的。
这很好,因为它将捕获所有输出数据,包括模型设置器/获取器和原始查询结果
希望尽早进行消毒(从数据库中检索) 早在吸气剂 返回html_escape($ this-> _ address1);
或从数组设置 如果(isset($ data ['address1'])) { $ this-> _ address1 = html_escape($ data ['address1']); }
这意味着将对所有构建的字符串进行清理。例如插入恶意脚本的多行地址。 123街 alert('恶意');, 镇 县
虽然这将适用于所有模型视图,但不会捕获结果查询,因此需要进行清理。
您认为高效卫生的最佳标准是什么。