Sebuah kalimat yang sangat dilematis bagi seorang Programmer ataupun Administrator jaringan. Ketika sebuah Keamanan ditingkatkan maka mau tidak mau Kenyamanan user harus sedikit dikorbankan. mungkin inilah salah satu alasan mengapa seorang Programmer lupa untuk sedikit memproteksi source code nya dari celah-celah keamanan seperti
SQL Injection atau XSS.
Coba tanyakan pada seorang ahli sekuriti tentang keamanan, maka dia pasti akan menyarankan anda untuk selalu melindungi data POST dan GET pada program PHP sebelum dimasukkan ke database.
Celah SQL Injection sampai hari ini masih tetap menjadi primadona bagi kalangan Hacker Black Hat dalam menyerang Website-Website yang menggunakan PHP, walaupun telah banyak korban yang diakibatkan oleh celah ini, namun para Programmer seolah tidak menyadari celah fatal ini. Dalam tulisan terdahulu saya pernah menulis tentang Celah Fatal pada website-website Pemerintahan di daerah saya. (namun hingga hari ini, celah tersebut tetap saja tidak diperbaiki).
Kali ini, saya ingin berbagi sedikit tips agar Website ataupun program PHP anda bisa terlindungi dari serangan SQL Injection ataupun XSS. Cara yang sangat simpel namun memiliki manfaat dengan nilai Jutaan rupiah ( lebay
)
Banyak Programmer yang lupa untuk mem-filter data yang dikirimkan oleh user ke dalam database, contohnya seperti script sederhana berikut ini :
1
|
mysql_query( "INSERT into pengguna (nama,email) VALUES ('$_POST[nama]','$_POST[email]')" );
|
penyusunan script yang benar-benar buruk menurut saya, sebab data ‘nama’ dan ‘email’ yang dikirimkan oleh pengguna tidak terfilter sama sekali.
Ada baiknya penyusunan script diatas dilakukan dengan cara dibawah ini, sehingga system anda akan aman dari serangan SQL Injection
1
2
3
4
5
|
< ?
$nama = mysql_real_escape_string( $_POST [ 'nama' ]);
$email = mysql_real_escape_string( $_POST [ 'email' ]);
mysql_query( "INSERT into pengguna (nama,email) VALUES ('$nama','$email')" );
?>
|
kegunaan dari fungsi mysql_real_escape_string adalah ketika user menginputkan sebuah data yang mengandung karakter khusus sepert ” (tanda kutip tunggal), sehingga nilai data yang dikirimkan ke database, akan dimasukkan sesuai dengan nilai sebenarnya.
Berikut fungsi sederhana yang bisa melakukan filter terhadap serangan SQL Injection dan XSS pada website anda
1
2
3
4
5
6
7
8
9
10
11
12
|
< ?
function filter( $data ) {
$data = trim(htmlentities( strip_tags ( $data )));
if (get_magic_quotes_gpc())
$data = stripslashes ( $data );
$data = mysql_real_escape_string( $data );
return $data ;
}
?>
|
Lalu ketika data-data tersebut akan dikirimkan ke database, gunakan fungsi foreach untuk mendapatkan nilai-nilai array diatas
1
2
3
|
foreach ( $_POST as $key => $value ) {
$datakoe [ $key ] = filter( $value );
}
|
setelah itu, saatnya untuk memasukkannya kedalam database,
1
|
mysql_query( "INSERT into pengguna (nama,email) VALUES ('$datakoe[nama]','$datakoe[email]')" );
|
Semoga dengan fungsi dan
teknik sederhana ini, website ataupun program PHP kita bisa terlindungi dari serangan SQL Injection ataupun XSS, tetap up to date dengan informasi keamanan terbaru