【发布时间】: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。
【问题讨论】: