Как не допустить SQL-инъекции в Yii2
2018-10-11
Тема, конечно, не новая, но напомнить полезно.
В Yii2 есть свой механизм конструирования SQL запросов, поэтому, стоит использовать только его и не допускать "чистых" запросов. Лучше использовать Active Record или, если не хочется городить модель, использовать CreateCommand.
Пример "чистого" запроса:
Yii::$app->db->createCommand('SELECT * FROM user WHERE id = ' . $_GET['id'])->queryOne();
Пример того же на ActiveRecord:
self::find()->asArray()->where(['id' => $_GET['id]])->one();
Пример с createCommand:
$command = Yii::$app->db->createCommand('SELECT * FROM user WHERE id = :id');
$user = $command->bindValue(':id', 123)->queryOne();
Пример с несколькими параметрами в запросе:
$command = \Yii::$app->db->createCommand("select * from user where id = :id and name = :name and sex = :sex");
$command->bindValue(':id', 123);
$command->bindValue(':name', 'Vasiliy');
$command->bindValue(':sex', 'regularly');
$user = $command->queryOne();