->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.
}
Laravel использует asc
в качестве направления по умолчанию, если предоставленное значение недопустимо ( ссылка ).
Так что я бы сказал, что вам не нужно проверять $sort
самостоятельно.