FlawOpen

flawopen.com/SQL Injection di JavaScript/Sequelize

Apakah Sequelize query() aman dari SQL Injection?

Panduan referensi
Jawaban singkat

Parameter kueri seperti kartu nilai tersegel: SQL menerima nilai secara terpisah dari instruksi kueri. Di Sequelize v6, bind mengirim nilai secara terpisah; replacements melakukan escape dan menyisipkan nilai sebelum pengiriman. Merakit string dengan input tidak tepercaya melewati keduanya. Keduanya tidak dapat menggantikan nama tabel atau kolom.

TIDAK AMAN — gabungkan input ke dalam SQL
sequelize.query(
  `SELECT * FROM users WHERE id = ${userId}`
)
DIPERKUAT — ikat nilai secara terpisah
sequelize.query(
  "SELECT id FROM users WHERE id = $id",
  { bind: { id: userId },
    type: QueryTypes.SELECT }
)

Pisahkan nilai dari sintaks SQL

Di Sequelize v6, Sequelize melakukan escape dan menyisipkan replacements sebelum kueri dikirim ke database; bind mengirim nilai terpisah dari teks SQL. Keduanya menghindari penggabungan nilai pengguna, tetapi sintaks berbeda menurut metode dan dialek. Parameter bukan untuk nama tabel, kolom, urutan, atau fragmen SQL bebas. Petakan struktur yang dapat dipilih ke allowlist tetap milik aplikasi. Metode model menangani nilai terstruktur umum, tetapi raw SQL dan ekspresi literal tetap perlu ditinjau.

Cara mengaudit konstruksi kueri Sequelize

rg -n 'sequelize\.query\(|Sequelize\.literal\(' --glob '*.{js,ts,mjs,cjs}' .

Pertanyaan umum

Apakah metode model Sequelize selalu aman dari SQL Injection?

Nilai terstruktur biasa ditangani konstruksi kueri Sequelize. Namun, tinjau raw SQL, ekspresi literal, dan string yang dirakit aplikasi. Parameterisasi tidak mengotorisasi akses record atau memvalidasi aturan bisnis.

Referensi

Lihat juga SQL Injection (CWE-89): cara kerja dan cara mencegahnya di setiap bahasa — flawopen.com Apakah SQLAlchemy text() aman dari SQL Injection? Apakah pemeriksaan query sqlx saat kompilasi mencegah SQL injection? Apakah stored procedure kebal terhadap SQL injection? Apakah TypeORM QueryBuilder aman dari SQL Injection? Django ORM SQL Injection: pola aman Injeksi SQL Doctrine ORM: kueri aman