Injeksi SQL ( SQLi )

Mar 12 2023
Halo, Terima kasih telah meluangkan waktu untuk membaca tulisan! Saya menghargainya! Konten hari ini akan membahas tentang 'Injeksi SQL' Konten sepenuhnya didasarkan pada pengalaman & pengetahuan pribadi saya, interaksi dengan orang-orang luar biasa di App Sec dan ruang Pengembangan Perangkat Lunak, dan banyak membaca dan mengamankan pengkodean. Pada artikel ini, saya akan mencoba untuk menyederhanakan konten dasar.
Mari belajar bersama | Injeksi SQL

Halo yang disana,

Terima kasih telah meluangkan waktu untuk membaca tulisan! Saya menghargainya!

Konten hari ini akan membahas tentang 'SQL Injection'

Konten sepenuhnya didasarkan pada pengalaman & pengetahuan pribadi saya, interaksi dengan orang-orang luar biasa di App Sec dan ruang Pengembangan Perangkat Lunak, dan banyak membaca dan membuat kode yang aman.

Pada artikel ini, saya akan mencoba untuk menyederhanakan konten dasar. Saya yakin pembaca akan memiliki pemikiran dan komentar mereka sendiri, dan saya menyambut umpan balik & diskusi apa pun.

Tampilan / Komentar / Pendapat adalah milik saya sendiri dan bukan milik saya di masa lalu / saat ini.

Mari belajar bersama!

Apa itu Injeksi SQL?

Suatu jenis serangan keamanan aplikasi di mana aktor jahat memasukkan kode SQL jahat ke bidang masukan yang rentan untuk mengakses dan memanipulasi data dalam database. SQLi memungkinkan penyerang untuk melihat/memodifikasi/menghapus data dalam database.

Bagaimana cara memperbaiki SQLi?

Jangan menggabungkan kueri SQL dan memasukkan nilai.

Selalu lakukan validasi input ( pendapat pribadi saya, ini sebenarnya mencegah banyak tanda tangan berbahaya ) dan kemudian ikuti salah satu strategi di bawah ini untuk memperbaiki SQLi -

  1. Parameterisasi Kueri: Berikan nilai input sebagai parameter ke pernyataan sql. Ini dicapai dengan menggunakan kueri berparameter. Ini mencegah input berbahaya dieksekusi sebagai kode SQL.
  2. Prosedur Tersimpan: Jauh lebih baik untuk tidak memiliki kueri SQL sql di dalam kode dan memindahkannya ke DB melalui prosedur tersimpan.

Kueri dengan Parameter:

Dalam contoh kode di bawahnya, nama dan pass diteruskan sebagai parameter ke pernyataan sql melalui 'setString()' . Ini adalah metode dari PreparedStatement.

....
// simple basic example
// assume name and pass are obtained from some input
// conn is the connection
String sqlStatement = "SELECT * FROM userdetails WHERE name = ? AND pass = ?";
PreparedStatement stmt = conn.prepareStatement(sqlStatement);
stmt.setString(1, name);
stmt.setString(2, pass);
ResultSet rs = stmt.executeQuery();
// carry on with your logic
....

Dalam contoh kode di bawahnya, 'nama' dan 'lokasi' diteruskan sebagai parameter ke prosedur tersimpan 'userDetails' melalui 'setString()'. Ini adalah metode CallableStatement. Output diterima melalui parameter 'output' yang menggunakan 'registerOutParameter'. Ini adalah metode lain dari CallableStatement.

....
// simple basic example
// Assume name and location are obtained from some input
// conn is the connection
CallableStatement stmt = conn.prepareCall("{ call userdetails(?,?,?) }");
stmt.setString(1, name);
stmt.setString(2, location);
stmt.registerOutParameter(3, java.sql.Types.INTEGER);
stmt.execute();
int output = stmt.getInt(3);
// carry on with your logic...
....

Komentar / Umpan Balik selalu diterima karena saya selalu ingin meningkatkan konten dan menjadi lebih baik.

Penulisan sumber: Pengalaman saya sendiri di App Sec, memparafrasakan konten dari beberapa situs web online, Open AI, DALL-E, Developer, dan alat NLP.

Terima kasih!

Tambahkan saya di LinkedIn