Laravel SQL Injection

0

Witam, jak w laravel przefiltrować dane wejściowe na wypadek SQL Injection?
W jednym miejscu użyłem Raw stąd ta konieczność

User::whereRaw('CONCAT(name, " ", last_name) LIKE ? ', '%' . $search . '%')
            ->orderBy('created_at', 'DESC')
            ->paginate(20);

chciałem przefiltorować $search

1

Osobiście bym to zrobił tak:

User::select(['users.*', DB::raw('CONCAT(name, " ", last_name) AS fullname')])
            ->where('fullname', 'LIKE', '%' . $search . '%')
            ->orderBy('created_at', 'DESC')
            ->paginate(20);

Edit: ale to co napisałeś, z tego co widzę też korzysta z pdo, bo przekazujesz wartość jako drugi parametr, a nie wszystko jednym ciągiem.

0

Czyli jeśli to już korzysta z pdo nie muszę tego dodatkowo zabezpieczać?

0

Z tego co widzę w kodzie to nie musisz, ale dla świętego spokoju zawsze możesz sobie przetestować atak i będziesz wiedział czy wszystko działa tak jak powinno.

0

Oki, a teraz jeszcze tak z czystej ciekawości, na przyszłość. Jak można zabezpieczać takie zapytania przed tym atakiem?

0

Drugi sposób ci podałem w swoim pierwszym poście. Na 90% zadziała jeszcze coś takiego:


User::where(DB::raw('CONCAT(name, " ", last_name)'), 'LIKE', '%' . $search . '%')
            ->orderBy('created_at', 'DESC')
            ->paginate(20);

Przekazując coś jako DB::raw laravel pomija escapowanie, a w tym przypadku to co przekazujesz do raw nie jest niebezpieczne, za to, to co przychodzi z zewnątrz już jest escapowane bo nie jest db::raw.

1 użytkowników online, w tym zalogowanych: 0, gości: 1