在CakePHP中清理数据/SQL注入
在美国在CakePHP中清理数据/SQL注入,php,mysql,cakephp,Php,Mysql,Cakephp,在美国 CakePHP handles SQL escaping on all parameters to Model::find() and Model::save(). 我正在用CakePHP阅读有关安全和清理数据的文章,我看到了一篇博客文章 在作者的前两个示例中(假设您使用的是Cake 2.X),如果您将一个变量设置为某个POST数据,然后在find语句中使用该变量,您是否仍然容易受到SQL注入的攻击 作者在本例中声明,Cake将保护您免受SQL注入的影响 $articles = $t
CakePHP handles SQL escaping on all parameters to Model::find() and Model::save().
我正在用CakePHP阅读有关安全和清理数据的文章,我看到了一篇博客文章
在作者的前两个示例中(假设您使用的是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。使用它还可以吗,还是应该切换到类似的库
编辑
我刚刚注意到作者使用了
“Article.date='{$date}'”
,而不是Article.date=>$date
如果使用
'conditions' => array(
'Article.date' => $this->request->data['Article']['date'],
)
在第二个示例中,您需要首先负责转义$date
变量
您现在在哪里使用sanitize类?来自该案例的建议可能也适用于您。我编辑了我的文章,因为我意识到作者使用了
“Article.date='{$date}'”
而不是Article.date=>$date
。后者会被蛋糕恰当地逃脱吗?它不会逃脱。为了验证,您可以进行一个简单的测试:发送无效数据并检查sql\u dump
以查看生成的查询。谢谢。所以,如果我需要操作需要使用变量的发布数据,我必须在find语句中使用该变量之前对其进行转义?是的,我使用的是sanitize类(2.3.9版)。不管怎样,我想检查find语句的清理。您应该尝试使用数组('Article.date'=>$this->request->data['Article']['date'])的find
方法('Article.date'=>$this->request->data['Article']['date'],)
如果不可能,在使用之前请先转义数据,或者也可以尝试查看准备好的语句--