使用Yii execute()可以在这里进行SQL注入吗?

MEM*_*MEM 1 sql-injection yii

我见过以下代码:

$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子句中的数据?

Mur*_*ald 9

Web应用程序的第一个数据安全规则是永远不"信任"GET/POST参数.

您的代码不会尝试"清理"您正在构建SQL语句的两个GET参数.这意味着有人可以操纵URL以将第二个(或更多)SQL语句"注入"到您正在执行的内容中.避免SQL注入攻击的最佳方法是使用"绑定"其参数的查询,从而确保您只能运行单个查询.有关如何使用绑定参数的yii文档可在以下URL中找到(第5项)

http://www.yiiframework.com/doc/guide/1.1/en/database.dao