6/23/2019

Cara Mengantisipasi Serangan SQL Injection


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