Pengertian , Contoh Penerapan dan Penanggulangan SQL Injection
Ø Apa itu SQL Injection ?
Kali ini saya akan membahas sedikit mengenai SQL Injection
yang merupakan salah satu istilah dalam dunia teknologi khususnya dalam
teknologi database. Tutorial ini sebenarnya saya buat untuk mengerjakan tugas
praktikum kuliah saya . Oke langsung saja kita bahas lebih lanjut lagi ----->>>
SQL Injection merupakan salah satu masalah vulnerability
dalam security dalam implementasi database. SQL sendiri merupakan singkatan dari
Structured Query Languange. Artinya pengelolaan database dilakukan dengan
mengirimkan perintah-perintah (queries) yang terstruktur dengan bahasa yang
tersedia. Nah, SQL Injection yang secara harafiah berarti penyuntikan SQL
memiliki artinya menyisipkan perintah atau query ke dalam query yang akan
digunakan dalam database SQL.
Penggunaan SQL sebagai salah satu database management system
turut mempopulerkan istilah SQL Injection ini dan menjadikan SQL Injection
sebagai salah satu masalah keamanan yang cukup berbahaya bila tidak ditangani
dengan serius. Apalagi penggunaan database dengan basis SQL seperti MySQL,
Microsoft SQL Server, PostgreSQL cukup populer dibanding database lainnya.
SQL Injection umumnya terjadi karena ketidaktelitian
programmer dalam membuat script yang akan dijadikan query SQL. Dan tentu saja
hal ini bukan merupakan sesuatu yang mudah untuk dihilangkan karena setiap
programmer memiliki tingkat ketelitiannya masing-masing saat membuat program.
Ø Contoh Penerapan SQL Injection
Mari kita lihat contoh penerapan SQL Injection seperti di
bawah. Perlu diketahui bahwa contoh yang saya gunakan adalah dengan bahasa
pemrograman PHP dan database MySQL.
Seringkali ketika kita akan mengambil data dari database,
kita akan menggunakan query seperti
"SELECT
* FROM table_user WHERE username = '".$username."';"
Ketika user memasukkan data ke variable $username dengan nilai
etersoul
maka kode di atas akan berubah menjadi:SELECT
* FROM table_user WHERE username = 'etersoul';
Hasil di atas tampak tidak bermasalah dan dengan mudah sang
programmer akan mendapatkan semua data mengenai seorang user dari table_user
yang memiliki username = ‘etersoul’. Masalah akan timbul bila seorang
hacker (atau user lain) yang mencoba untuk memasukkan nilai
' OR 1 = 1; --
ke dalam
variabel $username. Maka hasil dari penggunaan variabel tersebut adalah:SELECT
* FROM table_user WHERE username = '' OR 1 = 1; --'
Query di atas akan mengambil semua data yang terdapat dalam
table_user karena terdapat nilai 1 = 1 yang selalu bernilai true. Sedangkan
penggunaan
--
berguna agar kode setelah tanda tersebut dianggap sebagai komentar (comment)
dan tidak dieksekusi oleh SQL. Seorang hacker bisa saja menggunakan data yang
telah didapat di atas untuk keperluan yang buruk misalnya menggunakan account
user karena password telah diketahui (walau pada kenyataannya saat ini
kebanyakan password telah dienkripsi atau diacak sebelum dimasukkan ke
database).
Bila
contoh di atas tidak cukup, mari kita coba menggunakan
'; DROP TABLE table_user; --
sehingga
menjadi:
SELECT * FROM table_user WHERE username = '; DROP TABLE table_user;
--'
Setelah query tersebut dieksekusi, maka hilanglah tabel table_user
dari database Anda, kecuali Anda memiliki backup atas table itu.
Ø Cara Pencegahan
Cara yang dapat dilakukan cukup mudah. Di PHP sendiri
disediakan fungsi
mysql_real_escape_string()
yang dapat digunakan untuk “membersihkan” (sanitize) string dengan melakukan
escape atau perubahan terhadap karakter-karakter tertentu, misalnya karakter \
menjadi \\, ” menjadi \” sehingga tidak terjadi salah “asumsi” oleh SQL.
Sedangkan untuk melakukan sanitize terhadap integer dapat digunakan fungsi
intval(). Untuk float dapat digunakan floatval(). Sekarang mari kita lihat kode
hacker di atas setelah di-sanitize dengan mysql_real_escape_string($username);SELECT
* FROM table_user WHERE username = '\' OR 1 = 1; --'
atau
SELECT
* FROM table_user WHERE username = '\'; DROP TABLE table_user; --'
Yah, sekarang tanda ‘ telah di-escape menjadi \’ sehingga SQL
tidak akan menganggap tanda kutip tersebut sebagai bagian dari perintah SQL
untuk menutup tanda kutip sebelumnya, melainkan sebagai sebuah karakter.
Untuk bahasa pemrograman lainnya umumnya telah disediakan
juga fungsi untuk melakukan escape terhadap string (umumnya fungsi tersebut
menggunakan kata escape). Dalam PHP sendiri dapat digunakan
mysql_escape_string(), akan tetapi fungsi ini tidak disarankan untuk digunakan
karena tidak melakukan escape terhadap beberapa jenis karakter.
Yah, itulah sedikit penjelasan mengenai SQL Injection. Semoga
hal ini dapat membantu Anda dalam membuat program yang baik dan aman.
Artikel ini saya sadur dari http://etersoul.com/2008/02/20/sql-injection/ sebagai referensi saya dalam mengerjakan tugas kuliah saya .
SQL INJECTION
0 komentar:
Posting Komentar