我见过以下代码:
$id = $_GET["user"];
$auth = $_GET["id"];
$sql = 'DELETE FROM categories where user_id = '.$id.' and category_id = '.$auth;
Yii::app()->db->createCommand($sql)->execute();
Run Code Online (Sandbox Code Playgroud)
我被告知这段代码不行,因为它无法允许sql注入.
是因为$ _GET没有被正确过滤?
不会是Yii :: app() - > db-> createCommand($ sql) - > execute(); 避免那样?
或者当我们到达那里时,我们应该已经检查了where子句中的数据?
Web应用程序的第一个数据安全规则是永远不"信任"GET/POST参数.
您的代码不会尝试"清理"您正在构建SQL语句的两个GET参数.这意味着有人可以操纵URL以将第二个(或更多)SQL语句"注入"到您正在执行的内容中.避免SQL注入攻击的最佳方法是使用"绑定"其参数的查询,从而确保您只能运行单个查询.有关如何使用绑定参数的yii文档可在以下URL中找到(第5项)
http://www.yiiframework.com/doc/guide/1.1/en/database.dao