SQL Injection
SQL Injection (SQLi) adalah salah satu teknik serangan yang paling umum digunakan oleh penyerang untuk mengeksploitasi aplikasi web yang tidak aman. Serangan ini terjadi ketika penyerang menyisipkan atau “meng-inject” kode SQL berbahaya ke dalam kueri SQL yang dieksekusi oleh aplikasi. Hal ini dapat mengakibatkan akses tidak sah ke database, pengungkapan data sensitif, atau bahkan penghapusan data.
Parameter yang Umum Dapat Di-Injection
Berikut adalah beberapa parameter yang sering menjadi target dalam serangan SQL Injection:
1. Parameter Query String:
- Contoh : http://example.com/index.php?id=1
- Penyerang dapat mengubah nilai id untuk memodifikasi kueri SQL yang dihasilkan.
2. Parameter Form Input:
- Input dari formulir seperti nama pengguna, kata sandi, atau data lainnya yang dikirim melalui metode POST atau GET.
- Contoh :
<form action="login.php" method="post">
Username: <input type="text" name="username">
Password: <input type="password" name="password">
<input type="submit" value="Login">
</form>
- Penyerang dapat memasukkan kode SQL ke dalam field Username atau Password
3. Cookie:
- Data yang disimpan dalam cookie dapat diubah oleh penyerang.
- Contoh: Jika aplikasi menggunakan cookie untuk menyimpan informasi pengguna, penyerang dapat mengubah nilai cookie untuk mengakses data yang tidak seharusnya.
4. HTTP Headers:
- Beberapa aplikasi web mungkin menggunakan data dari header HTTP untuk membangun kueri SQL.
- Contoh: Header User-Agentatau Referer yang dimodifikasi dapat menjadi target.
5. Parameter URL (Path Parameters):
- Parameter yang terdapat dalam path URL.
- Contoh: ‘http://example.com/user/profile/1’
- Penyerang dapat mencoba untuk memodifikasi ‘1’ menjadi ‘1 or 1=1′ untuk mengeksploitasi.
6. Data yang Dikirim Melalui AJAX:
- Permintaan AJAX yang mengirimkan data ke server juga dapat menjadi target.
- Contoh: Data JSON yang dikirim melalui permintaan POST.
Jenis Serangan SQL Injection
1. In-Band SQL Injection:
- Penyerang menggunakan teknik yang sama untuk mengirimkan dan menerima data.
- Subtipe:
- Error-Based SQLi: Memanfaatkan pesan kesalahan SQL untuk mendapatkan informasi tentang struktur database.
- Union-Based SQLi: Menggunakan klausa ‘UNION‘ untuk menggabungkan hasil dari kueri yang berbeda.
2. Blind SQL Injection:
- Penyerang tidak mendapatkan data langsung dari respons, tetapi dapat menentukan apakah kueri berhasil atau tidak berdasarkan waktu respons atau perubahan dalam aplikasi.
- Subtipe:
- Boolean-Based Blind SQLi: Mengubah kueri untuk mengembalikan nilai benar atau salah.
- Time-Based Blind SQLi: Menggunakan fungsi delay untuk mengukur waktu respons.
3. Out-of-Band SQL Injection:
- Penyerang menggunakan saluran komunikasi yang berbeda untuk mendapatkan data, biasanya ketika tidak ada respons langsung dari server.
Cara Mencegah SQL Injection
- Penggunaan Prepared Statements: Menggunakan prepared statements dan parameterized queries untuk memisahkan data dari kueri SQL.
- Validasi Input: Memvalidasi dan menyaring semua input pengguna, termasuk data dari formulir, cookie, dan URL.
- Penggunaan ORM: Menggunakan Object-Relational Mapping (ORM) yang secara otomatis menangani parameterisasi kueri.
- Penerapan Prinsip Least Privilege: Mengurangi hak akses database untuk aplikasi sehingga penyerang tidak dapat mengeksploitasi data sensitif.
- Penggunaan WAF (Web Application Firewall): Menggunakan WAF untuk memfilter dan memantau lalu lintas HTTP, serta mendeteksi serangan SQLi.
Kesimpulan
SQL Injection adalah ancaman serius bagi keamanan aplikasi web. Memahami parameter yang dapat di-inject dan menerapkan langkah-langkah pencegahan yang tepat sangat penting untuk melindungi data sensitif dan menjaga integritas sistem. Dengan pengetahuan yang tepat dan praktik terbaik, pengembang dapat mengurangi risiko serangan SQLi dan menjaga keamanan aplikasi mereka.
Reference: https://portswigger.net/web-security/sql-injection