Yii 的 find 系列函数的问题 [ 未指定版本 ]
如果不采用类似 $model->find('id=:id', [':id'=>1])
,而是直接采用 $model->find('id=1')
的写法可以防止注入攻击吗?
最佳答案
-
访问地址
http://cms/frontend/web/index.php?r=admin/main&id=2%20or%201=1
代码如下
namespace frontend\controllers\admin; use yii; use yii\web\Controller; use backend\models\Nav; class MainController extends Controller { public function actionIndex() { var_dump(yii::$app->request->get()); $model = Nav::find(); $model->andWhere([ 'nav_id' => yii::$app->request->get('id') ]); echo $model->createCommand()->getSql(); echo "\n"; $data = $model->asArray()->all(); var_dump($data); } }
结果返回
array(2) { ["r"]=> string(10) "admin/main" ["id"]=> string(8) "2 or 1=1" } SELECT * FROM `mxq_nav` WHERE `nav_id`=:qp0 array(1) { [0]=> array(12) { ["nav_id"]=> string(1) "2" ["nav_pid"]=> string(1) "0" ["nav_type"]=> string(1) "1" ["nav_icon"]=> string(8) "nav-user" ["nav_sort"]=> string(1) "0" ["homePage"]=> string(0) "" ["collapsed"]=> string(1) "0" ["closeable"]=> string(1) "0" ["id"]=> string(4) "user" ["text"]=> string(6) "用户" ["href"]=> NULL ["status"]=> string(1) "1" } }
可以看到YII自动进行了SQL防注入,所以是安全的
共 2 条回复小伙儿 觉得很赞
其他 1 个回答
-
yedong0839 回答于 2015-06-16 11:42 举报
如果id是在程序里写死的,不是外部传递来的,那么$model->find('id=1')这么写是可以的;
但是id一般都是从外部传递的,所以model->find('id=1')是有风险的
yiissy001
注册时间:2013-12-04
最后登录:2017-09-25
在线时长:24小时55分
最后登录:2017-09-25
在线时长:24小时55分
- 粉丝7
- 金钱2529
- 威望90
- 积分3669