我为我的高级项目继承了一个用CakePHP编写的大型网站。不幸的是,它非常容易受到SQL注入的攻击。我之前从未使用过CakePHP,所以我试图确保我理解所有需要做的事情。使用save和find函数时,我所要做的就是使用正确的数组表示法来防止SQL注入?对于使用查询方法,我所要做的就是使用预处理语句?但是,我还需要做其他任何命令和方法吗?提前谢谢。
答案 0 :(得分:3)
Cake的模型类的“典型”用法将通过正确转发数据和参数来保护您免受SQL注入漏洞的影响。
BUT !!:
模型query() method假定你将使用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()和/或预处理语句!
使用任何框架,信任但验证。即,使用API doc来确认广告功能。 。E.g,: