Как предотвратить SQL-инъекцию в Laravel?

В моем контроллере у меня есть этот код:

public function create($brand_id)
{
    Brand::findOrFail($brand_id);
}

и это:

public function search() 
{
    $q = Input::get('q');
    $brands = Brand::where('title', 'LIKE', '%'.$q.'%')->take(80)->get();

Безопасен ли этот код? Под "безопасным" я подразумеваю безопасную SQL-инъекцию. Или мне нужно сделать какую-то переменную здесь? И что является лучшим способом для очистки ввода пользователя? Большое спасибо за помощь мне:)

Ответ 1

yes Eloquent использует привязку параметров за сценой, которая безопасно избегает любого ввода, используемого в where().

Ответ 2

В документе говорится, что Eloquent обрабатывает это за сценой, но вы также можете использовать как DB::escape($q) для более безопасной стороны

Ответ 3

очистить то и то от параноика человеку, чтобы быть в безопасности.

Ответ 4

Да, но обратите внимание, что не все параметры безопасны в операторе where:

public function search() 
{
  $col = Input::get('col');
  $brands = Brand::where($col, 'LIKE', '%sql injection in column name%')->take(80)->get();

В этом случае SQL инъекция возможна!

Первый параметр: имя столбца не проверено или не проверено, и здесь возможна инъекция sql, убедитесь, что вы защитите это должным образом!