[英]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 語句或表達式時,您應該始終使用參數化查詢。
如果你使用eloquent從db中保存和檢索數據,你就不用擔心sql注入
Eloquent 在幕后使用參數綁定,可以安全地轉義 where() 中使用的任何輸入。 Laravel 查詢構建器使用 PDO 參數綁定來保護您的應用程序免受 SQL 注入攻擊。 無需清理作為綁定傳遞的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.