CakePHP 中的所有清理方法 SQL

All Methods of Sanitizing SQL in CakePHP

我为我的高级项目继承了一个用 CakePHP 编写的大型网站。不幸的是,它极易受到 SQL 注入的攻击。我以前从未使用过 CakePHP,所以我试图确保我了解所有需要完成的工作。当使用保存和查找功能时,我所要做的就是使用适当的数组符号来防止 SQL 注入?对于使用查询方法,我所要做的就是使用准备好的语句吗?但是,我还需要执行其他命令和方法吗?提前致谢。

"Typical" 使用蛋糕的模型 class 将通过正确转义数据和参数来来去去,始终保护您免受 SQL 注入漏洞的侵害。

但是!!:

模型 query() method 假设 you 将使用可以在模型中访问的 value() 函数手动转义您的参数,例如:

$db = $this->getDataSource();
$sql = "SELECT * FROM foo WHERE bar='" . $db->value($param, 'string') . "'";
$data_array = $this->Foo->query($sql);

仅供参考,如果您需要访问控制器中的 value() 函数,您必须执行以下操作:

   $db = ConnectionManager::getDataSource('default');
   ...

正如您提到的,您也可以使用 prepared statements,在这种情况下,驱动程序本身会处理转义。

请注意,虽然 标准 使用模型方法(query() 除外)会为您处理所有事情,但您可以做一些时髦的事情——比如传递通过数组键参数或创建复杂的查找(例如,全文 MATCH ... AGAINST 语法)——这仍然需要您通过手动编码来防止 SQL 注入漏洞!

一般来说,只要 ORM 和标准模型方法可以解决问题,请尽量避免使用 query() and/or 准备语句!

对于任何框架,信任但验证。即,使用 API 文档来确认广告功能。例如:

http://api.cakephp.org/2.6/class-Mysql.html#_value