Kamis, 04 November 2010

12.Menangani MySQL Injection pada PHP

Kalau kamu sudah menggunakan database MySQL misalnya untuk login member, maka kemungkinan besar web kamu bisa dimasukkin oleh orang yang tidak berhak menggunakan sebuah teknik hack yang dikenal dengan MySQL Injection. PHP menyediakan sebuah fungsi yang menarik untuk mengatasinya. Mari kita lihat...
Sebelum kita belajar menggunakan fungsi PHP tersebut, ada baiknya saya coba sedikit ceritakan tentang MySQL Injection terlebih dahulu.

Pada dasarnya, MySQL Injection adalah sebuah cara memanipulasi query yang kita kirimkan ke tabel database MySQL kita sehingga query yang kita kirimkan diartikan lain oleh script PHP dan database MySQL kita.

Manipulasi ini bisa dilakukan untuk sekedar login secara ilegal, atau lebih parah lagi bisa digunakan untuk mendelete isi tabel yang kita miliki. Bahaya kan? Secara sederhana, caranya bisa saya gambarkan seperti ini.

Misalnya aja kamu memiliki query form login user sederhana menggunakan PHP dengan kode seperti ini:

$nama = "bambang";
$query = "SELECT * FROM pelanggan WHERE user = '$nama'";
echo "Normal: " . $query . "
";

// user input yang menggunakan MySQL Injection
$nama_manipulasi = "' OR 1'";

// Query untuk perbandingan
$query_manipulasi = "SELECT * FROM pelanggan WHERE user = '$nama_manipulasi'";

// tampilan query dengan injection
echo "Injection: " . $query_manipulasi;
Tampilan hasil eksekusi adalah seperti ini:

Normal: SELECT * FROM pelanggan WHERE user = 'bambang'
Injection: SELECT * FROM pelanggan WHERE user = '' OR 1''

Tampilan query pertama normal-normal aja, database akan memilih pelanggan yang bernama bambang.

Namun demikian, MySQL Injection telah membuat query kita melakukan hal yang berbeda. Hanya dengan menambahkan tanda kutip tunggal, si pemanipulasi telah mengakhiri string query kita dengan sukses sehingga menjadi seperti ini:

$user = ''

dan kemudian menambahkan OR 1 ke dalam statemen WHERE kita yang membuat artinya menjadi SELALU BENAR. Perhatikan hasil akhir query kita setelah di inject:

$user = '' OR 1

SELALU BENAR!

Jika script PHP kita sebelumnya hanya mengijinkan pelanggan yang ada dalam tabel MySQL saja yang masuk (dalam kasus ini yang bernama bambang), maka dengan trik ini, kita tidak memerlukan nama pelanggan untuk bisa masuk ke dalam login member. Karena dengan klausul OR 1, hasil query kita selalu benar.

Ok deh, dalam tulisan selanjutnya kita akan bahas cara menanganinya.

Mudah-mudahan bermanfaat.

web asal
Prothelord.com

Tidak ada komentar:

Posting Komentar