Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Хай юзаю я whereRaw вот в таком запросе -
DB::table('news')
->select('title', 'url', 'desc', 'text', 'created_at', 'image')
->where('delete', 0)
->where('enable', 2)
/* || ---> отсеивание новостей у которых срок публикаций еще не подошел | */
->where(function ($query) {
$query->whereNull('created_at')
->orWhere('created_at', '<=', Carbon::now()->toDateTimeString());
})
/* || ---> |*/
->whereRaw('MATCH (`title`, `desc`, `text`) AGAINST (\''.$q.'\')')
->orderBy('created_at', 'desc')
->offset($offest)
->limit($paginate)
->get();
С переменной $q приходит поисковая слова - типа "машина", "видео" и т.п. Тут запросто можно отправить sql инъекцию.
https://laravel.ru/posts/250
Читал я эту документацию где написано - "Будьте внимательны и не допускайте возможностей для SQL-инъекций! при сырых запросах". Аха, понял. Теперь вопрос - а как я буду собственно защищаться? Такое уже не описано.
Тут я свою переменную $q хочу положить в mysqli_real_escape_string($database, $q)
НО тут есть одно проблема - я в mysqli_real_escape_string должен передать идентификатор соединение с базой mysql. Как это в laravel получить?
Изменено evilgoogle (04.01.2019 11:30:33)
Не в сети
сами по себе "сырые" запросы не исключают использование плейсходеров. Посмотри здесь: https://stackoverflow.com/q/38488926/272885
$my_query = "select *, MATCH (name) AGAINST (?) from users
where MATCH (hobbies) AGAINST (? IN BOOLEAN MODE) limit 10 OFFSET ?"
$hobbies = DB::select($my_query, array($search_term, $search_term, (($page-1)*10)));
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Вот ещё годный по-моему пример как организовать полнотекстовый поиск в Eloquent через трейт. В трейте параметры через плейсхолдер реализованы.
https://arianacosta.com/php/laravel/tut … laravel-5/
public function scopeSearch($query, $term)
{
$columns = implode(',',$this->searchable);
$query->whereRaw("MATCH ({$columns}) AGAINST (? IN BOOLEAN MODE)" , $this->fullTextWildcards($term));
return $query;
}
здесь $this->searchable задаётся программистом в коде, поэтому может считаться безопасным, а $term происходит из пользовательского ввода и подставляется через плейсхолдер.
Изменено artoodetoo (04.01.2019 12:27:21)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Спасибо 2 пример с трейтом понравился. Тут в laravel используется pdo как бы и у него нет типа такой функций mysqli_real_escape_string, правильно?
Не в сети
Ну если покопаться, то в PDO есть аналог. Но его не рекомендуется использовать. Тем более, что ты не используешь PDO напрямую, а только через прослойку Eloquent.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Страницы 1