Laravel 查询生成器:此命令是否可以免除 SQL 注入?

Laravel query builder: is this command excused from SQL injections?

提问人:user8555937 提问时间:1/9/2020 更新时间:1/9/2020 访问量:270

问:

前段时间我在 Stackoverflow 上读到了一个公认的答案,它声称可以免除 SQL 注入,而事实并非如此。就我而言,我有以下代码:select("sql query")select(raw("sql query"))

$request; // Illuminate\Http\Request

DB::connection('default')->select("
    SELECT *
    FROM `some_table`
    WHERE `some_col` = '$request->some_val'
");

该命令是否免于SQL注入?如果是,我不明白查询生成器如何知道如何准备语句?:思维:

SQL 数据库 laravel sql-injection query-builder

评论


答:

-1赞 Muzaffar Shaikh 1/9/2020 #1

Laravel 查询构建器使用 PDO 参数绑定来保护您的应用程序免受 SQL 注入攻击。无需清理作为绑定传递的字符串。

您可以参考以下链接:

Laravel Eloquent:SQL注入预防是自动完成的吗? https://laravel.com/docs/5.6/queries#introduction

2赞 Davit Zeynalyan 1/9/2020 #2

对于不允许 sql 注入,您必须使用此代码

DB::::connection('default')
    ->select('SELECT * FROM `some_table` WHERE `some_col` = ?', [$request->some_val]);
2赞 Marcin Nabiałek 1/9/2020 #3

您应该使用:

DB::connection('default')->select("
    SELECT *
    FROM `some_table`
    WHERE `some_col` = ?
", [$request->some_val]);

以避免 SQL 注入。

您可以阅读:

参数绑定提供针对 SQL 注入的保护。

文档页面上

如果按照问题中所示执行 SQL 查询,则可能会遭受 SQL 注入的影响。