【问题标题】:How do I automate data sanitization of linked models in CakePHP如何在 CakePHP 中自动化链接模型的数据清理
【发布时间】:2014-01-08 02:26:34
【问题描述】:

为了为用户提供最新的 XSS 攻击保护,如果我完全正确的话,应该在向用户显示数据时而不是在插入数据库时​​对数据进行清理。所以我的问题是我可以在 CakePHP 中自动进行数据清理,以便在查询点也对 Cakes 查询自动检索的链接模型进行清理吗?还是应该始终手动循环调用所有链接模型的清理方法?

【问题讨论】:

标签: php cakephp sanitization


【解决方案1】:

所有未通过已知处理它的核心助手或外部助手之一传递的输出都应通过视图中的h() method 传递。

echo h($model['Model']['name']);

如果您想在模型中执行此操作,Model::afterFind() 回调是修改数据的正确位置。但我不建议对那里的所有内容进行清理,因为在某些情况下,例如编辑数据或将相同的数据暴露给 API 或 JSON,可能不需要或需要不同的清理。

参见HtmlPurifierHtmlPurifier for CakePHP。它是一个强大的过滤器和卫生库。

【讨论】:

  • 谢谢,afterFind () 正是我想要的!我已经将 HtmlPurifier 用于嵌入式代码和所见即所得的输入。到目前为止,对我来说,将清理作为模型的责任更有意义,但我需要进一步考虑它,因为我需要尽快构建一个 API。感谢您提出这个问题!
  • IMO 模型不是这个的最佳位置;在这种情况下,清理的目标是在 HTML 中使用。由于来自模型的数据也可以用于其他目的(导出到 CSV 文档?),每个“演示文稿”都需要不同的清理,因此我会选择在视图内进行转义并创建一个简单的帮助程序(自动)转义/清理所有值。
【解决方案2】:

在您看来,只需使用

<?php echo h($data['Model']['field']); ?>

h 是 htmlspecialchars() 的包装器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多