Laravel 查询生成器:此命令是否免于 SQL 注入?
Laravel query builder: is this command excused from SQL injections?
前段时间我在 Whosebug 上阅读了一个已接受的答案,该答案声称 select("sql query")
免于 SQL 注入,而 select(raw("sql query"))
则不然。在我的例子中,我有以下代码:
$request; // Illuminate\Http\Request
DB::connection('default')->select("
SELECT *
FROM `some_table`
WHERE `some_col` = '$request->some_val'
");
该命令是否免于 SQL 注入?如果是,我不明白查询生成器如何知道如何准备语句? :思考:
Laravel 查询生成器使用 PDO 参数绑定来保护您的应用程序免受 SQL 注入攻击。无需清理作为绑定传递的字符串。
您可以参考以下链接:
不允许sql注入您必须使用此代码
DB::::connection('default')
->select('SELECT * FROM `some_table` WHERE `some_col` = ?', [$request->some_val]);
你应该使用:
DB::connection('default')->select("
SELECT *
FROM `some_table`
WHERE `some_col` = ?
", [$request->some_val]);
避免SQL注入。
您可以阅读:
Parameter binding provides protection against SQL injection.
如果您按照问题中所示执行 SQL 查询,您可能会遭受 SQL 注入。
前段时间我在 Whosebug 上阅读了一个已接受的答案,该答案声称 select("sql query")
免于 SQL 注入,而 select(raw("sql query"))
则不然。在我的例子中,我有以下代码:
$request; // Illuminate\Http\Request
DB::connection('default')->select("
SELECT *
FROM `some_table`
WHERE `some_col` = '$request->some_val'
");
该命令是否免于 SQL 注入?如果是,我不明白查询生成器如何知道如何准备语句? :思考:
Laravel 查询生成器使用 PDO 参数绑定来保护您的应用程序免受 SQL 注入攻击。无需清理作为绑定传递的字符串。
您可以参考以下链接:
不允许sql注入您必须使用此代码
DB::::connection('default')
->select('SELECT * FROM `some_table` WHERE `some_col` = ?', [$request->some_val]);
你应该使用:
DB::connection('default')->select("
SELECT *
FROM `some_table`
WHERE `some_col` = ?
", [$request->some_val]);
避免SQL注入。
您可以阅读:
Parameter binding provides protection against SQL injection.
如果您按照问题中所示执行 SQL 查询,您可能会遭受 SQL 注入。