php - Laravel 中的 orderBy() 方法是否提供针对 sql 注入的保护?
问题描述
Laravel 中的 orderBy() 方法是否提供针对 sql 注入的保护?
Ex:
$column = "SUBSTRING_INDEX(material_type, '\\\', -1)";
$sort = 'desc';
DB::table('students')->orderBy(DB::raw($column), $sort)->get();
解决方案
->orderBy(DB::raw($column), $sort)
不安全,原始表达式总是容易受到 SQL 注入的攻击。
你可以使用->orderBy($column, $sort)
,但我不推荐它。
Laravel不对列名使用参数绑定,因为底层PDO
不支持它(参考)。参数绑定只能用于值 ( where name = ?
)。
Laravel 试图通过列名(引用)来防止 SQL 注入,但我不会依赖它。我假设您有一个允许的列名列表,因此将其用作白名单:
$columns = ['id', 'name', 'created_at', ...];
if(!in_array($column, $columns, true)) {
// Throw an exception or set $column to a secure default value.
}
asc
如果提供的值无效(参考),Laravel 使用默认方向。
所以我想说你不必检查$sort
自己。
推荐阅读
- java - Hibernate 事务不提交对数据库的更改 (SQL Server)
- xamarin.forms - 如何在 ViewModel 中获取绑定 ContentView 的服务?
- corda - 从特定节点的数据库中查询数据
- android - 后台进程android用自定义rom管理中文设备
- php - 如何在php中对json字符串进行排序?
- spring-boot - Spring kerberos 身份验证超时
- python - Airflow Scheduler 为同一个 dag 创建 PID 以每次生成任务
- c# - 如何使用 selenium c# 获取元素之外的文本并在运行时发生变化?
- python - 如何在不删除文件的情况下终止python编程过程
- magento - 将相同的图像分配给可配置产品 Magento 2 的所有关联产品