Skip to content

Instantly share code, notes, and snippets.

@rizkytegar
Created June 2, 2023 03:04
Show Gist options
  • Save rizkytegar/392774c71d8614e283b16b27ab0618d4 to your computer and use it in GitHub Desktop.
Save rizkytegar/392774c71d8614e283b16b27ab0618d4 to your computer and use it in GitHub Desktop.

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment