Skip to content

[SECURITY] Audit dan Refactor Raw SQL Query – Parameter Binding Wajib! #961

@vickyrolanda

Description

@vickyrolanda

Masalah

Masih ada kemungkinan sejumlah query menggunakan concat string atau whereRaw langsung memasukkan input user tanpa binding parameter (meski query builder aman, raw query risk tetap terbuka).

Dampak

  • SQL Injection risk bahkan di environment Laravel
  • Attacker dapat membaca/modify isi database, hijack session, dsb

Langkah Penyelesaian

  1. Audit seluruh query yang:
    • Menggunakan raw SQL (DB::select, whereRaw, orderByRaw, dst)
    • Melakukan concat input user ke string query
  2. Rewrite seluruh query seperti di bawah:
// Sebelum
DB::select("SELECT * FROM users WHERE username = '$username'");
// Sesudah (safe)
DB::select("SELECT * FROM users WHERE username = ?", [$username]);
// Atau gunakan eloquent dengan safelist field sort
  1. Lakukan static code analysis untuk mendeteksi anti-pattern query yang tidak aman.
  2. Tambahkan test case untuk masukan "injection string".

Setelah Perbaikan

  • Jalankan test masukan injection, pastikan tidak terjadi error SQL atau leak data.

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions