Salah satu teknik hacking yang sering digunakan adalah SQL Injection. Teknik ini biasanya mencoba melihat struktur sebuah database atau tabel dalam database dengan membuat SQL engine selalu menghasilkan nilai true pada query. Dan banyak hacker yang menggunakan text box pada form login sebagai media memasukkan syntax SQL. Beberapa tutorial menganjurkan untuk membatasi jumlah karakter maksimal yang boleh diinputkan user pada text box “Username” atau “password”. Itu diyakini bisa membingungkan hacker2 pemula yang ingin mencoba membobol situs yang kita punya. Atau bisa juga tidak menampilkan kode error dari mysql_error() yang asli. Dan mungkin banyak tutorial2 lain yang bermanfaat.
Di sini aku akan coba memberikan satu teknik untuk mengatasi SQL injection. Mungkin banyak kelemahannya. Tapi setidaknya aku sudah coba..
Kita mulai..
Seperti yang sudah disebutkan kalau SQL Injection biasanya dimasukkan melalui form Login karena banyak programmer yang mungkin membuat script login seperti ini :
“SELECT * FROM users WHERE username = ‘“ . $_GET[‘username’] . “’ AND password = ‘“ . $_GET[‘password’] . “’”
Di script seperti ini programmer mengambil langsung value dari text box username dan password untuk dijadikan variable dalam syntax SQL. Ini memudahkan hacker untuk membobol situs tersebut.
Daripada menggunakan script seperti itu, mungkin ada baiknya jika value dari form login tersebut digunakan untuk mencocokkan value dari query yang telah diambil sebelumnya. Maksudnya seperti ini :
Misal ini adalah script submit.php
Nah, pada awalnya ambil semua nilai pada tabel users. Tapi jangan lupa sebelumnya untuk buat koneksi ke database yang akan digunakan.
Selanjutnya, baru kita cek apakah value dari form login tersebut ada di salah satu baris dalam query yang telah kita ambil dengan menambahkan script ini di bawah script yang telah kita buat tadi.
$message = ‘Anda tidak diijinkan masuk’;
while($r = mysql_fetch_array($query) {
if($_GET[‘username’] == $r[‘username’]) {
if($_GET[‘password’] == $r[‘password’]) {
$message = ‘Selamat anda berhasil masuk’;
}
}
}
echo($message);
Itu yang kita lakukan. Looping tiap row pada query sambil mencocokkan username dan password. Jika ada maka akan ada pesan yang menunjukkan user berhasil login dan sebaliknya. Dengan cara ini value pada text box tidak bisa digunakan untuk menjadi variable pada syntax SQL. Tapi memang mungkin akan terasa berat untuk tabel yang berisi banyak user karena memang harus mengambil keseluruhan tabel.
Selamat mencoba dan mengembangkan.
©e-antz™
Sunday, July 5, 2009
Subscribe to:
Post Comments (Atom)



0 comments:
Post a Comment