[英]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.