Dalam pengembangan aplikasi berbasis web dengan menggunakan PHP kerapkali kita menggunakan koneksi menggunakan database. Dalam menghubungkannya kita menuliskan perintah koneksi menggunakan query dan perintah lainnya dalam query pula tentunya. Tapi terkadang tanpa disadari rentannya suatu situs diakibatkan penggunaan query yang tidak menggunakan keamanan yang baik. Kerentanan pada query salah satunya dengan melakukan injeksi pada query di dalam source code.

Dikarenakan query yang dilewatkan oleh PHP ke database MySQL ditulis layaknya SQL, maka melakukan kemungkinan resiko  untuk orang lain melakukan injeksi SQL menggunakan parameter di MySQL dikenal sebagai SQL injection. Dengan memasukkan malicious code melalui parameter di form, maka kemungkinan bagi attacker mematahkan keamanan server Anda.

Mari katakan Anda memiliki parameter form dengan nama variabel $barang, dan Anda memiliki SQL seperti ini :

$SQL = “SELECT * FROM tbl_barang WHERE barang = ‘$barang'”;

Jika parameter tersebut berasal langsung dari form, maka gunakanlah pada database untuk menangani  escapes dengan fungsi bawaan dari PHP, seperti ini :

$SQL = “SELECT * FROM tbl_barang WHERE barang = ‘” ‘
mysql_real_escape_string($barang) . ‘ ” ‘;

Karena jika tidak maka seseorang mungkin saja memasukkan parameter seperti di bawah ini melalui form :

39’; DROP tbl_barang; SELECT ‘FOO

Sehingga hasilnya pada $SQL Anda akan menjadi seperti ini :

SELECT * FROM tbl_barang WHERE barang = ’39’; DROP tbl_barang; SELECT ‘FOO’

Dikarenakan semicolon pada MySQL merupakan pemisah, maka pada database akan terlihat seperti ini :

SELECT * FROM tbl_barang WHERE barang = ’39’
DROP tbl_barang
SELECT ‘FOO’

Begitulah jadinya.

Untuk menghindari penyerangan melalui SQL Injection, lakukan dua hal :

  • Selalu melakukan validasi semua parameter. Seperti contoh, jika memang paramter yang dibutuhkan merupakan angka, maka pasti bahwa parameter tersebut memang angka.
  • Selalu gunakan fungsi mysql_real_escape_string()  pada data untuk melewatkan atau menentukan tanda kutip satu (quote) atau kutip dua (double quote) pada data Anda.

Untuk mengurangi kemungkinan MySQL melakukan hal-hal yang tidak diinginkan, maka perketatlah hak user pada MySQL. Penentuan terhadap user account untuk melakukan hal-hal tertentu saja, dan juga pada tabel-tabel tertentu. Misalnya, Anda membuat pengguna pada MySQL yang hanya bisa melakukan select pada tabel tertentu dan hal yang lain tidak bisa. Tapi mungkin tidak akan terlalu berguna jika Anda memiliki data yang dinamik, kecuali Anda memiliki informasi pengunjung yang sangat sensitif, ini memungkinkan untuk orang lain menginginkan akses yang tidak diperlihatkan.

Related Posts
Laravel Db Snapshot : Melakukan Dump dan Load Database di Laravel dengan Cepat dan Mudah

Bagi yang mencari cara untuk melakukan dump dan load database melalui laravel dengan cepat dan mudah, bisa mencoba package laravel Read more

Laravel Mysql Logger : Menyimpan Log Error di Laravel ke MySQL

Biasanya atau secara default jika laravel mengalami error maka otomatis akan menyimpan log error tersebut ke dalam file storage/log/laravel.log. Terdapat Read more

Laravel Shield : Membuat dan Implementasi HTTP Basic Auth di Laravel Pada Middleware

Apa itu http basic auth? http basic auth merupakan implementasi keamanaan sederhana berupa username dan password pada url / route Read more

Cara Install Composer di Mac Os

Composer merupakan dependency manager untuk library PHP yang cross platform. Bisa digunakan di Linux, windows dan Mac. Berikut cara install Read more

Leave a Reply

Your email address will not be published. Required fields are marked *