SQL Injection adalah teknik serangan yang memanfaatkan celah keamanan dalam aplikasi berbasis database untuk menyisipkan atau "injeksi" perintah SQL berbahaya. Tujuannya adalah untuk mengakses atau memanipulasi data yang tidak seharusnya bisa diakses oleh penyerang. Serangan ini sering terjadi pada aplikasi web yang tidak menangani input dari pengguna dengan benar.
Contoh Serangan SQL Injection
-
Mengambil Data Sensitif
Salah satu contoh serangan SQL Injection adalah ketika penyerang mencoba mengakses data sensitif dari database. Misalnya, jika sebuah form login di sebuah situs web hanya memeriksa username dan password tanpa validasi yang memadai, penyerang dapat memasukkan input seperti berikut:
' OR '1'='1
Dengan memasukkan input ini ke dalam form login, query SQL yang dihasilkan mungkin menjadi seperti:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '...'
Karena '1'='1' selalu benar, query ini akan selalu mengembalikan data dari tabel
users
, sehingga penyerang bisa mendapatkan akses ke informasi yang tidak seharusnya mereka lihat. -
Mengubah Data dalam Database
Dalam serangan ini, penyerang dapat memasukkan perintah SQL yang tidak hanya membaca data tetapi juga mengubahnya. Misalnya, jika ada form untuk mengupdate profil pengguna, penyerang dapat mengisi field input dengan data berikut:
', is_admin = TRUE WHERE username = 'admin' --
Ini akan mengubah query SQL menjadi:
UPDATE users SET email = '', is_admin = TRUE WHERE username = 'admin' --
Dengan demikian, penyerang bisa mengubah status admin pengguna yang ada.
-
Menghapus Data dari Database
Penyerang juga bisa menggunakan SQL Injection untuk menghapus data dari database. Jika form input tanpa validasi yang baik menerima data untuk menghapus item, penyerang bisa memasukkan input berikut:
'; DELETE FROM products; --
Query SQL yang dihasilkan akan menghapus semua data dari tabel
products
, yang tentunya dapat menyebabkan kerusakan serius pada sistem.
Cara Menghindari Serangan SQL Injection
-
Gunakan Prepared Statements
Prepared Statements atau parameterized queries adalah cara efektif untuk melindungi aplikasi dari SQL Injection. Dengan menggunakan teknik ini, parameter input dipisahkan dari query SQL, sehingga mencegah eksekusi perintah SQL berbahaya.
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = :password'); $stmt->execute(['username' => $username, 'password' => $password]);
-
Validasi dan Sanitasi Input
Pastikan untuk selalu memvalidasi dan menyaring semua input pengguna. Gunakan whitelist untuk nilai yang diperbolehkan dan hindari karakter-karakter khusus yang tidak diperlukan.
-
Gunakan ORM (Object-Relational Mapping)
ORM seringkali menyediakan lapisan abstraksi yang dapat membantu mencegah SQL Injection dengan secara otomatis menghindari perintah SQL yang raw.
-
Terapkan Prinsip Least Privilege
Berikan hak akses minimal yang diperlukan oleh aplikasi untuk berfungsi. Dengan cara ini, jika terjadi serangan SQL Injection, kerusakan yang ditimbulkan dapat diminimalkan.
Referensi
- OWASP Foundation. (2023). SQL Injection. OWASP SQL Injection
- Acunetix. (2023). SQL Injection Attack Examples. Acunetix SQL Injection
- Microsoft. (2023). SQL Injection Overview. Microsoft SQL Injection
Tidak ada komentar