繁体   English   中英

避免在yii2中注入sql

[英]Avoid sql injection in yii2

如何在将查询参数插入表之前过滤查询参数以防止sql注入?

有这样的代码:

$QueryParams = Yii::$app->request->getQueryParams();
$model = new Accounts();
$model->attributes = $QueryParams;
$connection->createCommand()->insert('accounts', $model->attributes)->execute();

这是安全的方法吗?

这种方法是安全的,但有一个更好的方法:

$model = new Accounts();

if ($model->load(Yii::$app->request->get()) && $model->save()) {
    // 'when the model is saved' logic here
}

// other code

这基本上做了,发布的代码做了什么,但包括模型验证,更短,更容易理解。

这种方法很安全。 但是,如果Accounts类是ActiveRecord类(扩展它),那么您可以简化代码:

$model->load(Yii::$app->request->get());
$model->save();

它相当于:

$connection->createCommand()->insert('accounts', $model->attributes)->execute();

哪个不太直观,如果您使用的是其他类型的数据库,甚至可能存在兼容性问题。

此外,有时您需要原始查询。 在这种情况下,最好使用预准备语句

$result = $connection
    ->createCommand('SELECT id FROM accounts WHERE name=:name')
    ->bindValues([':name' => $name])
    ->queryColumn();

GitHub上有一个很好的Yii2安全最佳实践指南。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM