Laravel删除查询生成器

cas*_*stt 16 php mysql laravel-4

在Laravel 4 Illuminate\Database\Query中,Builder类delete函数接受null作为id参数.这个函数的行为意味着如果我有类似的东西:

DB::table('users')->where('id', $id)->delete();
Run Code Online (Sandbox Code Playgroud)

如果$id将作为a传递null,它将截断整个表.这意味着除了标准验证之外,我还必须使用! is_null($id)验证来包装每个delete语句.这是安全漏洞还是被视为标准做法?

Jas*_*wis 38

我认为你误解了参数的目的是什么.它只是您展示的示例的快捷方式.如果您有用户ID,则可以删除它们而无需编写该where子句.

DB::table('users')->delete($id);
Run Code Online (Sandbox Code Playgroud)

以上内容与此相同:

DB::table('users')->where('id', $id)->delete();
Run Code Online (Sandbox Code Playgroud)

您显然在使用任何这些方法之前执行检查以确保提供了有效的ID.我不会说这是一个安全漏洞,只是开发人员在开发应用程序时需要注意的事情.在没有首先验证输入的情况下,您不仅可以删除内容.