在CakePHP中清理数据/ SQL注入

时间:2014-02-06 21:00:35

标签: php mysql cakephp

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

1 个答案:

答案 0 :(得分:1)

如果您使用

,则会转义变量
'conditions' => array(
    'Article.date' => $this->request->data['Article']['date'],
 )

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

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