【问题标题】:When to do sanitization in CakePHP何时在 CakePHP 中进行清理
【发布时间】:2010-10-31 02:07:23
【问题描述】:

我从食谱中阅读(第 4.2 节)

如果您使用 CakePHP 的 ORM 方法(例如 find() 和 save())和正确的数组表示法(例如,array('field' => $value))而不是原始 SQL,CakePHP 已经可以保护您免受 SQL 注入。对于 XSS 的清理,通常最好将原始 HTML 保存在数据库中而不进行修改,并在输出/显示时清理。

所以我们确定我们永远不需要针对 SQL 手动清理用户数据,只要我们限制为 find() 和 save() 等方法吗?特别是,如果我直接从 $_POST 而不是从 $this->data 获取数据,这是真的吗?换句话说,假设我使用 $this->data 进行 find() 查询。然后在编写数组 $this->data 或编写 find() 查询时,CakePHP 会针对 SQL 进行清理?

我的第二个问题是清理要显示的数据。 Sanitize::html 是幂等的吗?那么,我可以在我的 beforeSave() 方法中使用它,还是在我第二次保存时它会中断,因为它会再次应用并给出新的结果?

【问题讨论】:

    标签: cakephp sanitization


    【解决方案1】:

    关于这个问题:

    在写入数组 $this->data 或为 find() 编写查询时,CakePHP 会针对 SQL 进行清理?

    Cakephp 不会清理控制器中的 $this->data,如果你检查蛋糕代码,在 Dispatcher::parseParams() http://api13.cakephp.org/view_source/dispatcher/#line-244 你会看到当 $_POST 被复制到控制器数据时,值没有被清理.

    但是,不建议使用 $_POST,因为您会失去使用表单助手时获得的所有蛋糕的魔力

    【讨论】:

      【解决方案2】:

      哇 - 如果您直接从 $_POST 获取数据而不是 如果您打算在以后的任何页面上发布数据,那么您绝对应该清理数据。我记得大约 2 年前的一次大恐慌,因为据透露,由于用于登录的选择查询的布局,简单的 SQL 注入将允许蛋糕 1.1 网站被利用。

      然而,许多用户故意将旧规则用于将在 SQL 中使用的输入字段:

      “为了防止 SQL 注入,用户输入不能直接嵌入到 SQL 语句中。相反,用户输入必须转义.....”

      所以,是的,这是一个单独的问题,但同样的想法——虽然 CakePHP 是老板,并且为我们做了很多,我们不应该盲目相信它的安全性。自己清理数据对性能的影响几乎为零。所以就去做吧。

      【讨论】:

      • 好的,我正在这样做,但只是为了理解。假设我使用 $this->data 进行 find() 查询。然后 CakePHP 在编写数组 $this->data 或编写 $this->find() 的查询时对 SQL 进行清理?在第二种情况下,即使我使用 $_POST,消毒似乎仍然是多余的
      • 顺便说一下,我正在清理将要显示的数据。我要求在 SQL 查询中使用数据。
      【解决方案3】:

      不,它不会影响你。您可以在before_save() 中使用它。如果您使用任何自定义查询功能,即您可以使用自己的查询的功能,您将需要清理

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-10
        • 1970-01-01
        • 1970-01-01
        • 2018-08-29
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        相关资源
        最近更新 更多