2014-03-28 91 views
7

在Laravel 4中Illuminate\Database\QueryBuilderdelete函數接受null作爲id參數。而這一功能的behaivor意味着,如果我有這樣的:Laravel刪除查詢生成器

DB::table('users')->where('id', $id)->delete(); 

如果$id將作爲null通過,它將截斷整個表。這意味着除了標準驗證之外,我必須用! is_null($id)驗證來包裝每個刪除語句。這是安全漏洞還是被視爲標準做法?

回答

16

我認爲你誤解了參數的目的是什麼。對於您所示的示例,這只是一個快捷方式。如果你有一個用戶ID,你可以刪除它們而無需編寫where子句。

DB::table('users')->delete($id); 

上面的是相同的這一點:

DB::table('users')->where('id', $id)->delete(); 

你會明顯使用任何這些方法,以確保有效的ID已經被提供之前執行檢查。我不會說這是安全漏洞,只是開發人員在開發應用程序時需要注意的一點。如果沒有首先驗證輸入,你不要只是不加思索地刪除東西。

+0

幹得不錯,因爲大便無處不在。 – Puzbie

+0

@Jason,謝謝你的出色解決方案,但如果主鍵與id不同,那麼如何使用DB :: table('users') - > delete($ id);在這種情況下? –