【问题标题】:Sanitizing data / SQL injections in CakePHP在 CakePHP 中清理数据/SQL 注入
【发布时间】:2014-02-06 21:00:35
【问题描述】:

CakePHP Docs 中声明

CakePHP handles SQL escaping on all parameters to Model::find() and Model::save(). 

我在阅读有关使用 CakePHP 的安全性和清理数据的内容时,偶然发现了 this 博客文章。

在作者的前两个​​示例中(假设您使用的是 Cake 2.X),如果您为某些 POST 数据设置一个变量,然后在 find 语句中使用该变量,您是否仍然容易受到 SQL 的攻击?注射?

作者在这个例子中指出 Cake 会保护你免受 SQL 注入

$articles = $this->Article->find('all', array(
                'conditions' => array(
                    'Article.date' => $this->request->data['Article']['date'],
                )
            )
        );

除非您在 $date 变量上使用 sanitize 实用程序,否则这会使您容易受到 SQL 注入的攻击。

$date = $this->request->data['Article']['date']
$articles = $this->Article->find('all', array(
                    'conditions' => array(
                        "Article.date='{$date}'",
                    )
                )
            );

既然它们都是相同的值($date 和 $this->request->data['Article']['date']),Cake 是否真的以不同的方式处理它们?

另外,我注意到 CakePHP 文档状态 Sanitize 自 2.4 起已弃用。我目前正在使用 2.3.9。还可以用吗,还是换成HTML Purifier之类的库?

编辑

我刚刚注意到作者使用"Article.date='{$date}'" 而不是Article.date => $date

【问题讨论】:

    标签: php mysql cakephp


    【解决方案1】:

    如果你正在使用,变量会被转义

    'conditions' => array(
        'Article.date' => $this->request->data['Article']['date'],
     )
    

    在第二个示例中,您需要先负责转义 $date 变量。

    你现在在哪里使用 sanitize 类? documentation 的建议也可能适用于您的情况。

    【讨论】:

    • 我编辑了我的帖子,因为我意识到作者使用的是"Article.date='{$date}'",而不是Article.date => $date。后者会被蛋糕正确逃脱吗?
    • 它不会被转义。为了验证,您可以做一个简单的测试:发送无效数据并检查sql_dump 以查看生成的查询。
    • 谢谢。因此,如果我需要操作需要使用变量的 Posted 数据,我必须先转义该变量,然后才能在 find 语句中使用它?是的,我正在使用 sanitize 类(使用 2.3.9)。无论如何,我想检查 find 语句的消毒
    • 您应该尝试将find 方法与数组一起使用('Article.date' => $this->request->data['Article']['date'],) 如果这不可能,请在使用之前转义数据,或者也可以尝试查看准备好的语句--@ 987654322@
    猜你喜欢
    • 2020-09-09
    • 2019-03-24
    • 1970-01-01
    • 2011-05-05
    • 2019-06-06
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多