Laravel的paginate方法可以设置用户信息的记录限制吗?

Can I set the record limit of Laravel's paginate method with user information?

我正在使用查询构建器的 paginate 方法,我希望允许用户选择每页的项目数。

$paginate= Model::paginate($request->input('per_page'));

我这样做会不会为 SQL Injection 打开一个漏洞,或者这个值是否先被清除?

您可以使用验证器来确保 $request->input('per_page') 是一个整数或您想要的任何验证。

文档在这里:https://laravel.com/docs/9.x/validation

必须保护此类方法。这就是模型的用途。

但你是对的,安全总比后悔和核实你的场所要好。对于流行的框架尤其如此,因为有时创建者渴望简单胜过一切,往往甚至忘记了安全性。

但似乎在这种情况下,Laravel QueryBuilder castsperPage 值转换为整数,使其免受 SQL 注入:

protected function compileOffset(Builder $query, $offset)
{
    return 'offset '.(int) $offset;
}

然后我深入研究了历史,发现 the protection has been added almost a decade ago,因此您可以确定 Laravel 的任何受支持版本都是安全的。

也就是说,验证用户输入仍然是个好主意。即使受到 SQL 注入的保护,您也不希望出现任何意外行为。我不认为 500000-100 是好的值。如果您发现数据无效,那么已经退出是一个很好的策略,而不必等待一些奇怪的事情发生。所以你可以考虑像任何其他输入一样验证这个输入值,就像优秀的程序员总是做的那样。