Как предотвратить внедрение 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. Или я должен сделать некоторые переменные, чтобы очистить здесь? И как лучше всего очистить пользовательский ввод? Большое спасибо за помощь:)

2 ответа

Решение

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

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

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

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

В этом случае возможно внедрение sql!

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

Другие вопросы по тегам