SQL-инъекция может произойти здесь с Yii execute ()? - PullRequest
1 голос
/ 10 января 2012

Я видел следующий код:

$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.

Это так?из-за того, что $ _GET не фильтруется должным образом?

Не будет ли Yii :: app () -> db-> createCommand ($ sql) -> execute ();избежать этого?

Или когда мы туда приедем, мы должны уже проверить данные, которые помещены в предложение where?

1 Ответ

9 голосов
/ 10 января 2012

Первое правило безопасности данных для веб-приложения - никогда не "доверять" параметрам GET / POST.

Ваш код не пытается "санировать" два параметра GET, с помощью которых вы строите оператор SQL,Это означает, что кто-то может манипулировать URL-адресом, чтобы «вставить» второй (или более) оператор SQL в то, что вы выполняете.Лучший способ избежать атак с использованием SQL-инъекций - это использовать запросы, которые «привязывают» их параметры, таким образом гарантируя, что вы можете выполнять только один запрос.Документация yii о том, как использовать связанные параметры, доступна по следующему URL-адресу (элемент № 5)

http://www.yiiframework.com/doc/guide/1.1/en/database.dao

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...