Как предотвратить внедрение 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-инъекция, убедитесь, что вы сами правильно защитили это!