flawopen.com/SQL Injection/Javascript
Bayangkan formulir yang hanya meminta nomor tiket. Peretas memasukkan teks jebakan sehingga sistem menampilkan seluruh tiket pengguna lain.
SQL injection terjadi ketika masukan pengguna langsung disisipkan ke dalam perintah SQL basis data.
Perusahaan telekomunikasi TalkTalk terkena denda £400.000 setelah 150.000 data pengguna dicuri melalui SQL injection.
Sumber: UK Information Commissioner's Office, 2016.// 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];
}
// 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];
}
Driver memisahkan teks kueri dan nilai parameter sebelum dikirimkan ke basis data.
mysql2 menggunakan ?, sementara driver pg menggunakan $1, $2.
TypeScript hanya memvalidasi tipe data saat kompilasi, bukan saat runtime.
grep -rn "query(\`.*\${" --include="*.js" --include="*.ts" .
npx eslint --rule 'no-template-curly-in-string: error' .
p/javascript ruleset in CI to catch unparameterized database queries automatically.Aman untuk method standar, tetapi kueri mentah (raw) tetap harus diparameterisasi.