【问题标题】:Laravel query builder: is this command excused from SQL injections?Laravel 查询生成器:此命令是否可以免除 SQL 注入?
【发布时间】:2020-04-26 22:58:59
【问题描述】:

前段时间,我在 Stackoverflow 上阅读了一个已接受的答案,该答案声称 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 注入?如果是,我不明白查询生成器如何知道如何准备语句? :思考:

【问题讨论】:

    标签: sql database laravel sql-injection query-builder


    【解决方案1】:

    为了不允许sql注入你必须使用这个代码

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

    【讨论】:

      【解决方案2】:

      你应该使用:

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

      避免 SQL 注入。

      你可以阅读:

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

      documentation page.

      如果您按照问题所示执行 SQL 查询,您可能会遭受 SQL 注入。

      【讨论】:

        【解决方案3】:

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

        您可以参考以下链接:

        Laravel Eloquent: is SQL injection prevention done automatically? https://laravel.com/docs/5.6/queries#introduction

        【讨论】:

          猜你喜欢
          • 2011-07-06
          • 1970-01-01
          • 1970-01-01
          • 2015-06-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多