清理数据库存储过程调用/查询生成器/eloquent 的用户输入

Sanitize user input for DB stored procedure calls / query builder / 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() 简单地转义用户输入是否足够?

您的 DB::statement 调用不安全(假设 $iName 等来自 user/unsafe 输入 - 如果这些 相对 安全值仅来自您的代码,您对它们很小心)。其他两个还好。

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]);