Mengantisipasi serangan SQL Injection bukanlah hal yang mudah jika dilakukan oleh pemula. Karena SQL Injection menggunakan bahasa sql jadi untuk yang belum mengerti agak susah. Namun di google, forum-forum it, dan grup-grup yang bertebaran di dunia maya saya yakin sudah pernah menyinggung tentang SQL injection.
Apa Itu SQL Injection?
SQL injection adalah kegiatan menyisipkan perintah SQL
kepada suatu statement SQL yang ada pada aplikasi yang sedang berjalan. Dengan kata lain SQL injection ini merupakan suatu tehnik pengeksploitasi pada web apilikasi yang
didalamna menggunakan database untuk penyimpanan datanya. Terjadinya SQL
injection tersebut dikarenakan security atau keamanan pada level aplikasi (dalam hal ini
aplikasi web) masih kurang sempurna. Kurang sempurnanya adalah pada
cara aplikasi meng-handle inputan yang
boleh di proses ke dalam database.
Misalnya pada
suatu web
yang terdapat
fasilitas login, terdapat dua buah inputan pada umumnya, yaitu username dan password. Jika karakter yang masuk melalui dua buah inputan tersebut tidak difilter (disaring)
dengan baik maka bisa
menimbulkan
efek SQL injection,
ini dikarenakan
biasanya inputan tersebut
secara sistem akan menjadi bagian dari kriteria dari suatu perintah SQL di
dalam
aplikasi web-nya. Secara garis besar terjadinya SQL injection tersebut adalah sebagai berikut:
Tidak adanya pemfilteran terhadap karakter – karakter tanda petik satu ‘ dan
juga karakter double minus -- yang menyebabkan suatu
aplikasi
dapat disisipi dengan perintah SQL. Sehingga
seorang Hacker dapat menyisipkan perintah SQL kedalam suatu parameter maupun pada text area suatu form
Macam – Macam Teknik SQL
Injection
SQL injection merupakan serangan yang ditujukan pada database dengan menginputkan query tanpa validasi atau
ilegal. Untuk melakukan injection,
penyerang dapat melakukan nya dengan beberapa teknik penulisan
:
Tautologies Penyerang menginputkan query yang
hasilnya selalu “True” :
Select * from users where username=’admin’
or
1=1 --‘ and password=’’;
UnionQueries Penyerang menginputkan “UNION QUERY” untuk
mendapatkan lebih banyak data :
Select bookTitle, ISBN from books where bookID = 1 UNION Select “hack”, balance from accounts where accNo = 3456 --;
Piggyback Queries
Penyerang menginputkan tambahan statement yang mempengaruhi hasil query :
Select * from users where username=’’; drop table
accounts --
and password=’
Malformed Queries Penyerang menggunakan kerentanan pada hasil error message untuk mendapatkan informasi dari database :
Select * from books where bookID=convert(int,(select top 1 name from
sysobjects where xtype =‘u’));
Inference Jenis serangan ini bergantung pada response-time pada web server
untuk mendapatkan informasi :
Select * from
users
where username=’hello1’;
select if( user() like 'root@%', benchmark(1000000,
sha1('test')), 'false'
); --‘
and password=’’
Alternate Encoding Jenis
serangan ini menggunakan kombinasi dari spesial karakter (seperti quote, dash dll ) untuk melewati skema pertahanan
:
Select * from books where bookID=1;exec(char(0x730065006c00650063007400200040004000760065007200730069006 f006e00);
Metode Untuk Mengatasi Serangan SQL Injection
Metode untuk menghindari SQL Injection dapat dilakukan kedalam dua
cara yaitu secara client-side dan server-side.
Pada
metode client-Side yaitu menerima 'Shadow SQL Query' dari server-side dan melakukan pengecekan
terhadap deviasi
yang terjadi antara shadow
query dengan query dinamis yang dibentuk
oleh masukan dari pengguna. Jika
ditemukan
adanya
deviasi maka
dapat dipastikan bahwa
masukannya tidak benar (Malicious). Sedangkan dalam penelitian ini dikedepankan metode secara server-side. yaitu melalui sejumlah langkah antara lain:
1. Gunakan Prepared Statement atau Parameterized Query. Lebih sederhana dan lebih mudah untuk dimengerti dibanding query dinamis,
Parameterized
query mengirimkan setiap parameter kedalam lapisan query setelah semua
kode SQL telah didefinisikan.
Database dapat membedakan antara
kode dan data, apapun masukan
dari pengguna.
Seorang penyerang tidak dapat merubah maksud query,
meskipun SQL command telah disusupkan di dalamnya.
2. Lakukan validasi masukan. Autentikasi masukan dari pengguna dengan aturan-aturan yang telah didefinisikan seperti panjang,
tipe dan filter lain
jika diperlukan.
3. Matikan atau sembunyikan pesan-pesan
error yang
keluar dari server database.
4. Mengunci atau membatasi database anda. Jika aplikasi web Anda tidak
memerlukan
akses ke tabel tertentu, maka pastikan
bahwa mereka
semua tidak memiliki izin untuk itu. Jika hanya read-only maka akan menghasilkan laporan dari tabel hutang account anda maka pastikan
anda menonaktifkan insert
/ update / menghapus akses.
Ok sekian artikel kali ini semoga membantu kalian
dalam menghadapi serangan sql injection. Jika ada yang salah atau ada yang
kurang saya mohon maaf. Sekian terima kasih
0 komentar
Post a Comment