Dasar SQL Injection dan Pencegahannya
Pada artikel sebelumnya telah di jelaskan jenis serangan pada jaringan komputer, salah satunya adalah SQL injection. SQL injection memanfaatkan vulnerability pada validasi input sebuah website. Website yang terkoneksi ke database, terkadang mengijinkan user untuk mengakses sql query melalui web tersebut. Hal ini dapat memungkinkan user yang tidak berkepentingan untuk mengakses database tersebut.
Sebuah website dibuat berdasarkan bahasa pemrograman web, contohnya asp, php, html, dll. Beberapa bahasa pemrograman web seperti php dapat otomatis mengeksekusi data yang disediakan untuk user. Pemilihan jenis database pada website harus berhati-hati. Karena terdapat salah satu jenis databe yang mengijinkan low-privilaged-users untuk mengakses user password pada database tersebut. Hal ini memungkinkan akan tercurinya akun user yang terdaftar.
SQL injection secara manual dapat dilakukan dengan cara menambahankan comments atau karakter tertentu pada website. Karakter yang ditambahkan berupa petik tunggal (‘) atau strip (-) dengan comments berupa (/*) atau strip 2 (–). Hasil keluaran SQL injection dapat digunakan sebagai input field SQL. Contoh:
Melakukan sebuah request url menggunakan method GET (atau POST):
Jika request tersebut terdapat kesalahan syntak, maka SQL server akan mengeluarkan sebuah pesan error. Pesan error yang tidak disembunyikan (ditampilkan di website), menyebabkan user tidak berkepentingan dapat memanfaatkan script tersebut untuk mengakses halaman admin.
SQL injection dapat dilakukan dengan menuliskan syntak:
Maka hasil code SQL yang diberikan akan seperti berikut:
Selain itu, jika hasil sql code password 1=1 akan selalu true:
Syntak tersebut memungkinkan attacker dapat login dengan menyisipkan perintah SQL kedalam form login.php:
Sebagian besar website menyimpan halaman login admin pada /admin, /admin.asp, /admin/login.asp, /admin-login, dll. Penyimpanan yang mudah ditebak dapat memungkinkan user tidak berkepentingan mengakses halaman admin. Jika user tersebut mendapatkan kredential login, maka database anda dapat dicuri atau dirubah. Selain itu, apabila syntax SQL dapat dieksekusi melalui website, maka user tidak berkepentingan dapat merubah, menambah, menghapus tabel atau procedure dalam database anda.
SQL injection tidak hanya bertujuan mengakses database pada server anda. SQL injection juga dapat mengakses sistem pada database server. Hal memungkinkan terjadi apabila SQL server mengijinkan eksekusi via database melalui procedure xp_cmdshell, dan menjadikan OS compromise. Bagaimapun juga, SQL injection tergantung pada kreativitas attacker. Apabila attacker dapat menemukan syntak SQL yang tepat, maka banyak informasi dapat diterima oleh attacker.
Cara pencegahan SQL injection:
- Validasi user input, sebaiknya melakukan filter input SQL comments dan spesial karakter (‘;:”)
- Membatasi panjang input box (jika memungkinkan), dengan cara membatasinya di kode program. Sehingga input box tidak dapat diinjeksi dengan perintah yang panjang.
- Menonaktifkan fasilitas-fasilitas standar seperti Stored Procedures, Extended Stored Procedures pada SQL queries.
- Membatasi akses database pada website. Sebaiknya SQL query tidak dapat diakses melalui website.
- Menonaktifkan atau menyembunyikan pesan error SQL server pada web.
- Memonitor log error message SQL server.
Post a Comment