在Laravel 4中Illuminate'Database'Query
在Builder
类delete
函数接受null
作为id
参数。这个函数的行为意味着如果我有这样的东西:
DB::table('users')->where('id', $id)->delete();
如果$id
将作为null
传递,它将截断整个表。这意味着除了标准验证之外,我还必须用! is_null($id)
验证包装每个delete语句。这是安全漏洞还是常规做法?
我想你误解了参数的目的。对于您所展示的示例,它只是一个快捷方式。如果你有一个用户ID,你可以删除他们而不写where
子句。
DB::table('users')->delete($id);
上面的代码与下面的相同:
DB::table('users')->where('id', $id)->delete();
显然,在使用任何这些方法之前都要执行检查,以确保提供了有效的ID。我不会说这是一个安全漏洞,只是作为开发人员在开发应用程序时需要注意的事情。您不能在没有验证输入的情况下随意删除内容。
DB::table('table_name')->where('table_id', $request['request_id'])->delete();