簡體   English   中英

如何從 Laravel 中的 SQL 注入保護這個 sql 查詢?

[英]How can I secure this sql query from SQL Injection in Laravel?

我正在嘗試在 Laravel 中創建 restAPI。 如何從 sql 注入中保護這樣的 SQL 查詢?

Route::get('api/restaurant/id/{id}', 'RestaurantController@getRestaurantById');

public function getRestaurantById($id) {
        $restaurant = Restaurant::where('id', $id)->first();

        return $restaurant;
    }

如果您使用 laravel ORM 來構建您的 sql 查詢,您的查詢會自動受到 sql 注入的保護。

例如:

$restaurant = Restaurant::where('id', $id)->first();

這個查詢是由 laravel ORM 創建的,如果你運行dd(Restaurant::where('id', $id)->toSql())你會看到 id 沒有直接注入到查詢中:

SELECT * FROM restaurants WHERE id = ?

您可以使用DB::select()DB::raw() ... 等運行 sql 原始查詢。如果您查看 Laravel 文檔,您將看到每個原始方法都有數組參數,通常是第二個參數。 例如:

DB::select('SELECT * FROM restaurants WHERE id = ?', [$id]);
Restaurant::whereRaw('id = ?', [$id])->first();
...
DB::raw('SELECT * FROM restaurants WHERE id = ?', [$id]);

上述每個查詢都是安全的 sql 注入。

不要寫這樣的查詢DB::select("SELECT * FROM restaurants WHERE id = $id"); 這對您的應用程序來說可能非常危險。

有關更多信息,請查看此處: https : //laravel.com/docs/5.8/database#running-queries

希望這可以幫助。

Laravel 的數據庫查詢構建器提供了一個方便、流暢的界面來創建和運行數據庫查詢。 它可用於在您的應用程序中執行大多數數據庫操作,並適用於所有支持的數據庫系統。

Laravel 查詢構建器使用 PDO 參數綁定來保護您的應用程序免受 SQL 注入攻擊。 無需清理作為綁定傳遞的字符串。 介紹

請注意,如果您構建原始 SQL 語句並執行這些語句或使用原始表達式,則不會自動受到保護。

根據 Laravel 文檔

Laravel 查詢構建器使用 PDO 參數綁定來保護您的應用程序免受 SQL 注入攻擊。 無需清理作為綁定傳遞的字符串。

原始語句將作為字符串注入到查詢中,因此您應該非常小心,不要創建 SQL 注入漏洞。

在構建原始 SQL 語句或表達式時,您應該始終使用參數化查詢。

Laravel -> 數據庫:查詢生成器 -> 簡介

Laravel -> 數據庫:查詢生成器 -> 原始表達式

如果你使用eloquent從db中保存和檢索數據,你就不用擔心sql注入

Eloquent 在幕后使用參數綁定,可以安全地轉義 where() 中使用的任何輸入。 Laravel 查詢構建器使用 PDO 參數綁定來保護您的應用程序免受 SQL 注入攻擊。 無需清理作為綁定傳遞的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM