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') 是一个整数或您想要的任何验证。
必须保护此类方法。这就是模型的用途。
但你是对的,安全总比后悔和核实你的场所要好。对于流行的框架尤其如此,因为有时创建者渴望简单胜过一切,往往甚至忘记了安全性。
但似乎在这种情况下,Laravel QueryBuilder casts 将 perPage
值转换为整数,使其免受 SQL 注入:
protected function compileOffset(Builder $query, $offset)
{
return 'offset '.(int) $offset;
}
然后我深入研究了历史,发现 the protection has been added almost a decade ago,因此您可以确定 Laravel 的任何受支持版本都是安全的。
也就是说,验证用户输入仍然是个好主意。即使受到 SQL 注入的保护,您也不希望出现任何意外行为。我不认为 500000
或 -100
是好的值。如果您发现数据无效,那么已经退出是一个很好的策略,而不必等待一些奇怪的事情发生。所以你可以考虑像任何其他输入一样验证这个输入值,就像优秀的程序员总是做的那样。
我正在使用查询构建器的 paginate
方法,我希望允许用户选择每页的项目数。
$paginate= Model::paginate($request->input('per_page'));
我这样做会不会为 SQL Injection
打开一个漏洞,或者这个值是否先被清除?
您可以使用验证器来确保 $request->input('per_page') 是一个整数或您想要的任何验证。
必须保护此类方法。这就是模型的用途。
但你是对的,安全总比后悔和核实你的场所要好。对于流行的框架尤其如此,因为有时创建者渴望简单胜过一切,往往甚至忘记了安全性。
但似乎在这种情况下,Laravel QueryBuilder casts 将 perPage
值转换为整数,使其免受 SQL 注入:
protected function compileOffset(Builder $query, $offset)
{
return 'offset '.(int) $offset;
}
然后我深入研究了历史,发现 the protection has been added almost a decade ago,因此您可以确定 Laravel 的任何受支持版本都是安全的。
也就是说,验证用户输入仍然是个好主意。即使受到 SQL 注入的保护,您也不希望出现任何意外行为。我不认为 500000
或 -100
是好的值。如果您发现数据无效,那么已经退出是一个很好的策略,而不必等待一些奇怪的事情发生。所以你可以考虑像任何其他输入一样验证这个输入值,就像优秀的程序员总是做的那样。