contoh kode Express.js yang rentan terhadap serangan SQL injection pada bagian SELECT dan contoh kode yang aman:
Contoh Kode Rentan SQL Injection:
// Route yang rentan terhadap SQL injection
app.get('/users', (req, res) => {
const username = req.query.username;
const sql = `SELECT * FROM users WHERE username = '${username}'`;
db.query(sql, (err, results) => {
if (err) {
console.error('Error executing query:', err);
return res.status(500).send('Error executing query');
}
res.json(results);
});
});
Pada contoh kode di atas, nilai username
diambil dari query parameter req.query.username
dan langsung digabungkan ke dalam string SQL tanpa melalui proses sanitasi atau parameterisasi. Hal ini membuat aplikasi rentan terhadap serangan SQL injection. Misalnya, jika seseorang memasukkan nilai username
sebagai ' OR '1'='1
pada URL, maka query yang terbentuk akan menjadi SELECT * FROM users WHERE username = '' OR '1'='1'
, yang akan menghasilkan semua data pengguna.
Contoh Kode Aman dari SQL Injection:
// Route yang aman dari SQL injection
app.get('/users', (req, res) => {
const username = req.query.username;
const sql = 'SELECT * FROM users WHERE username = ?';
db.query(sql, username, (err, results) => {
if (err) {
console.error('Error executing query:', err);
return res.status(500).send('Error executing query');
}
res.json(results);
});
});
Pada contoh kode di atas, nilai username
tetap diambil dari query parameter req.query.username
, namun kali ini digunakan parameterisasi dengan menempatkan tanda tanya