在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
。
答案 0 :(得分:1)
如果您使用
,则会转义变量'conditions' => array(
'Article.date' => $this->request->data['Article']['date'],
)
在第二个示例中,您需要负责首先转义$date
变量。
你现在在哪里使用消毒课? documentation的建议也可能适用于您的情况。