JENIS-JENIS CELAH KEAMANAN SQL INJECTION
- Karakter-karakter Kontrol Tidak Disaring secara Benar ~ Incorrectly filtered escape characters.
Bentuk injeksi ini muncul pada saat user memasukkan karakter-karakter string yang tidak difilter dan dapat dilewatkan dalam pernyataan SQL.
Ilustrasinya :- SQL Umum :statement := “SELECT * FROM users WHERE name = ‘” + userName + “‘;”
-Di User Name dan Password :
Input User : a’ or ‘t’='t Instruksi SQL : SELECT * FROM users WHERE name=’a'OR’t'=’t';
-Delete Table SQL :
Input User : a’;DROP TABLE users; SELECT * FROM data WHERE name LIKE ‘%’: Instruksi SQL : SELECT * FROM users WHERE name = ‘a’;DROP TABLE users; SELECT * FROMDATAWHERE name LIKE’%';
- Bentuk Penanganan yang Tidak Benar ~ Incorrect type handling. Bentuk ini akan muncul pada saat user memasukkan karakter string dengan tipe data yang tidak sama atau tipe data string tersebut tidak periksa batasannya oleh programmer.
Contoh :statement := “SELECT * FROM data WHERE id = ” + a_variable + “;” dan 1;DROP TABLE users maka SELECT * FROMDATAWHERE id = 1;DROP TABLE users;
- Celah Keamanan berada didalam Server Basis Datanya ~ Vulnerabilities inside the database server.
Biasanya celah keamanan bisa terjadi dalam software server database itu sendiri, seperti: MySQL Server didalam salah satu instruksi fungsi SQL berikut :
mysql_real_escape_string().
Bagian ini yang biasanya penyerang berhasil menembus dengan memasukkan karakter-karakter string biasa maupun karakter string kosong. - Penyamaran SQL Injection ~ Blind SQL Injection
Injeksi ini biasanya dilakukan terhadap aplikasi web, yang hasil attack-nya tidak ditampilkan secara langsung namun disamarkan dalam bentuk halaman lain.- Respon Logika Kondisi ~ Conditional Responses
Salah satu teknik untuk mengevaluasi statement logika pada tingkat aplikasi yang sama pada layer.
Contoh :SELECT booktitle FROM booklist WHERE bookId = ‘OOk14cd’AND1=1
Hasilnya : Berupa halaman web normal.
SELECT booktitle FROM booklist WHERE bookId = ‘OOk14cd’AND1=2
- Kesalahan Logika ~ Conditional Errors
Pemaksaan ini akan mengakibatkan database error untuk mengevaluasi pernyataan yang menyebabkan error apabila pernyataan WHERE adalah true.
Contoh :SELECT 1/0 FROM users WHERE username=’Ralph’
- Jeda Waktu ~ Time Delays
Pemaksaan ini mengakibatkan engine database SQL menjalankan proses secara terus-menerus samapai beberapa lama ataupun berdasarkan jeda waktu yang diinjeksikan terhadap query tersebut.
- Respon Logika Kondisi ~ Conditional Responses
Untuk mengetahui lebih dalam tentang cara kerja SQL Injection dapat anda pelajari disini http://www.unixwiz.net/techtips/sql-injection.html
Sebagai administrator ada beberapa cara yang mungkin dapat membantu mengatasi SQL injection ada beberapa cara, antara lain :
- Untuk variable berupa angka yang di lewatkan pada URL address(metode get) misal http://www.contoh.org?pid=30 , pid di parsing ke integer terlebih dahulu sebelum masuk ke query. (semua ini berlaku juga untuk metode post)
- Atau bisa juga sebelum masuk ke query, variable dengan metode get di lewatkan ke fungsi mysql_escape_string untuk mengubah variable sebagai string yang tidak akan di eksekusi. bentuknya $pid = mysql_escape_string($_GET['pid']).
- Database yang di publish di front, baiknya di set read only pada user databasenya, kecuali pada bagian yang membutuhkan write ke database.
- Buat fungsi untuk filter kata2 update,delete,insert,grant dll dalam variable yg masuk dalam query.