清理DB存储过程调用/查询构建器/ eloquent的用户输入

时间:2015-02-11 15:03:06

标签: php mysql laravel eloquent

我正在使用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是否清理上述3种情况的用户输入?使用 htmlspecialchars()简单地逃避用户输入是否足够?

1 个答案:

答案 0 :(得分:1)

您的DB::statement电话不安全(假设$iName等来自用户/不安全的输入 - 如果这些值仅来自您的代码,则相对安全你小心他们)。其他两个都很好。

对于SQL,

htmlspecialchars不会转义,它会为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]);