flawopen.com/SQL Injection/Javascript

SQL Injection in Javascript

Kritis CWE-89 Draft — pending review
Language: English Português (Brasil) Español Français Deutsch Русский 简体中文 日本語 हिन्दी 한국어 Bahasa Indonesia
Penjelasan sederhana

Bayangkan formulir yang hanya meminta nomor tiket. Peretas memasukkan teks jebakan sehingga sistem menampilkan seluruh tiket pengguna lain.

Istilah penting di halaman ini
Template literal
String dengan backtick (`...`) yang menyematkan variabel langsung ke SQL secara tidak aman.

Apa yang terjadi

SQL injection terjadi ketika masukan pengguna langsung disisipkan ke dalam perintah SQL basis data.

Dampak dunia nyata

Perusahaan telekomunikasi TalkTalk terkena denda £400.000 setelah 150.000 data pengguna dicuri melalui SQL injection.

Sumber: UK Information Commissioner's Office, 2016.

Rentan vs. Diperbaiki

VULNERABLE
// userId comes straight from request query
async function getUser(pool, userId) {
  const query = `SELECT * FROM users
    WHERE id = ${userId}`;
  const [rows] = await pool.query(query);
  return rows[0];
}
FIXED
// value is passed separately, never inlined
async function getUser(pool, userId) {
  const [rows] = await pool.query(
    'SELECT * FROM users WHERE id = ?',
    [userId]
  );
  return rows[0];
}

Mengapa perbaikan ini berhasil

Driver memisahkan teks kueri dan nilai parameter sebelum dikirimkan ke basis data.

Jebakan spesifik bahasa

Perbedaan placeholder driver

mysql2 menggunakan ?, sementara driver pg menggunakan $1, $2.

Kesalahpahaman umum

TypeScript menjamin keamanan

TypeScript hanya memvalidasi tipe data saat kompilasi, bukan saat runtime.

Cara memeriksa apakah Anda terpengaruh

grep -rn "query(\`.*\${" --include="*.js" --include="*.ts" . npx eslint --rule 'no-template-curly-in-string: error' .
Run Semgrep with p/javascript ruleset in CI to catch unparameterized database queries automatically.

Daftar periksa pencegahan

Pertanyaan Umum

Apakah ORM selalu aman?

Aman untuk method standar, tetapi kueri mentah (raw) tetap harus diparameterisasi.

Referensi

Lihat juga: Cross-Site Scripting Command InjectionPath Traversal