这里可以使用Yii execute()执行SQL注入?

这里可以使用Yii execute()执行SQL注入?,yii,sql-injection,Yii,Sql Injection,我看到了以下代码: $id = $_GET["user"]; $auth = $_GET["id"]; $sql = 'DELETE FROM categories where user_id = '.$id.' and category_id = '.$auth;           Yii::app()->db->createCommand($sql)->execute(); 我被告知此代码不正确,因为它不允许sql注入 是因为$u GET没有被正确过滤吗 难道

我看到了以下代码:

$id = $_GET["user"]; 
 $auth = $_GET["id"]; 
 $sql = 'DELETE FROM categories where user_id = '.$id.' and category_id = '.$auth;          
 Yii::app()->db->createCommand($sql)->execute();
我被告知此代码不正确,因为它不允许sql注入

是因为$u GET没有被正确过滤吗

难道Yii::app()->db->createCommand($sql)->execute()不会吗;避免这种情况


或者,当我们到达那里时,应该已经检查放置在where子句上的数据了吗?

Web应用程序数据安全的第一条规则是永远不要“信任”GET/POST参数

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


Web应用程序数据安全的第一条规则是永远不要“信任”GET/POST参数

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


您的数据库表是否有ActiveRecord模型?若否,原因为何?你可以回避整个SQL注入问题,因为使用ActiveRecord你不需要自己编写查询。我发现它们很容易阅读,查询周围有很多包装和一些额外的选项,至少我在Zend上看到的是这样。当然,这仍然是一个很好的观点,但是,作为一个优先事项,我更愿意以一种对我来说更自然的方式编写查询。我建议阅读这篇关于数据库表是否有ActiveRecord模型的Wiki文章?若否,原因为何?你可以回避整个SQL注入问题,因为使用ActiveRecord你不需要自己编写查询。我发现它们很容易阅读,查询周围有很多包装和一些额外的选项,至少我在Zend上看到的是这样。当然,这仍然是一个很好的观点,但是,作为一个优先选择,我更喜欢以一种对我来说更自然的方式编写查询