mysql_real_escape_string() adalah fungsi PHP yang digunakan untuk memberi backslash di beberapa kode untuk ditampilkan pada halaman, namun saat menyimpan menuju sql, kode akan tetap normal tanpa ada backslash.
Beberapa kode tersebut antara lain x00,n,r,,’,” dan x1a. Berbeda dengan fungsi addslashes() maupun stripslashes() yang kedua berkaitan dengan tanda slash, dan pada saat menyimpan beberapa kode itu akan berubah, namun tidak untuk mysql_real_escape_string() karena kegunaan-nya khusus pada MySQL dan termasuk pada pengaman.
Banyak developer CMS/Situs yang masih tidak dapat mengamankan websitenya dari para hacker yang selalu mengincar database, dan kesalahan yang dipakai adalah menampilkan konten langsung dengan mysql_fetch tanpa menambah mysql_real_escape_string. Dan sesaat dipanggil dengan menambahkan tanda petik (‘) pada url variable terlihat erorr, sehingga dapat diproses oleh hacker tersebut untuk mencari username dan password admin.
Seperti pada halaman login yang harus mencari username dan password yang cocok di database dengan fungsi SELECT, dapat diakalin juga dengan tanda berkaitan petik. dan ini dapat menimbulkan bahaya karena bisa membobol halaman admin lalu merusak website itu.
Untuk mencegahnya gunakan fungsi mysql_real_escape_string() setiap menampilkan rows dari database supaya tidak terjadi hal-hal yang tidak diinginkan pada website. Saya hanya dapat menjelaskan sedikit tentang fungsi ini dan silahkan lihat kode dibawah ini.!
BENAR
<?php $db = mysql_connect("localhost", "username", "password"); if (!$db) { die('Could not connect: '.mysql_error()); } //Misalkan username dan password didapatkan dari $_POST $username = mysql_real_escape_string($_POST['username']); $password = mysql_real_escape_string($_POST['password']); $sql = "SELECT * FROM users WHERE user='".$username."' AND password='".$password. "'" //Kode lainnya.... mysql_close($db); ?>
SALAH
<?php $db = mysql_connect("localhost", "username", "password"); if (!$db) { die('Could not connect: '.mysql_error()); } //Misalkan username dan password didapatkan dari $_POST $username = $_POST['username']; //Kesalahan $password = $_POST['password']; //Kesalahan $sql = "SELECT * FROM users WHERE user='".$username."' AND password='".$password. "'" //Kode lainnya.. mysql_close($db); ?>
Kode diatas memperlihatkan cara menampilkan rows database dengan benar dan salah. Jadi jika benar pada hasil akan muncul tanda backslash pada setiap tanda petik, dan untuk kode yang salah diatas tidak muncul tanda backslash sama sekali dan dapat menimbulkan SQL Injection.
Penggunaan system login dapat memakai fungsi addslashes() namun supaya aman lebih baik gunakan mysql_real_escape_string(). Jika ada yang ditanyakan tentang diatas silahkan komentar 🙂
Semoga bermanfaat dan Selamat mencoba
5 comments
Thanks Artikel nya gan…
MANTAP
mantap, sebelumnya suka pake fungsi ini tp ga tau kegunaannya :v
Artikelnya bagus2 vroh!!, trus berbagi dan smngat!
Tanks Gan atas pencerahannya , semonga kita sama2 saling membantu. sukses trus