2015-02-11 2 views
1

Я использую laravel, и мои вызовы БД следующие.Санизировать пользовательский ввод для вызовов хранимых процедур БД/построителя запросов/eloquent

В некоторых местах я использую красноречива

$model = new UserModel(Input::all()) 
$model->save(); 

В некоторых местах я использую построитель запросов

$users = DB::table('Users')->where('ID', $id)->get(); 

В некоторых местах я использую хранимые процедуры

DB::statement('CALL usp_AddUser("' . $iName . '","' . $iDomain . '","' . $iAlias . '",@oMessage)'); 

Разделяет ли laravel пользовательский ввод для вышеуказанных трех сценариев ?. Было бы достаточно просто избежать ввода пользователем с помощью htmlspecialchars()?

ответ

1

Вашего DB::statement вызова небезопасный (при условии, $iName и т.д. прихожу от пользователя/небезопасного входа - это было бы относительно безопасности, если эти ценности пришли только из кода, и вы были осторожны с ними). Остальные двое в порядке.

htmlspecialchars не убегает для SQL, он ускользает для HTML, совершенно отдельный набор правил.

DB::statement позволит использование PDO заполнителей, что обеспечивает безопасность:

DB::statement('CALL usp_AddUser(:iName, :iDomain, :iAlias, @oMessage)', ['iName' => $iName, 'iDomain' => $iDomain, 'iAlias' => $iAlias]); 

или

DB::statement('CALL usp_AddUser(?, ?, ?, @oMessage)', [$iName, $iDomain, $iAlias]); 
+0

Спасибо за быстрый ответ. Да, эти значения исходят от ввода пользователем (для всех сценариев). Для оператора DB :: я изменю его в соответствии с вашими входами. – Chandra