2014-03-28 64 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);在这种情况下? –