Ada dua hal penting yang harus Anda lakukan untuk menghindari masalah keamanan yang serius.
-
Anda harus keluar dari input pengguna sebelum memasukkannya ke dalam kueri SQL Anda. Melarikan diri berarti keluar dari semua karakter khusus seperti
'
; untungnya, ada fungsi yang sudah melakukannya secara otomatis:mysql_real_escape_string .Jika Anda tidak lolos dari input pengguna, hal-hal buruk bisa terjadi. Bayangkan kueri Anda adalah
INSERT INTO userdata VALUES ('$user_data')
. Sekarang bayangkan pengguna menulis'; DROP DATABASE userdata;
.Jika Anda tidak menghindarinya, kueri Anda akan menjadi:
INSERT INTO userdata VALUES (''; DROP DATABASE userdata;')
. Seperti yang dapat Anda bayangkan, ini tidak baik:jika Anda mengaktifkan multi pernyataan, Anda dapat mengucapkan selamat tinggal pada database Anda. Ini disebut SQL Injection menyerang. -
Saat Anda mengeluarkan variabel Anda ke pengguna, Anda juga perlu mengganti karakter khusus HTML dengan benar dengan entitas HTML. Untungnya, ada fungsi untuk melakukannya juga:htmlspecialchars() . Ini akan mengubah karakter HTML khusus seperti
<
ke<
.Hal ini tampaknya menjadi masalah yang sering diremehkan, namun pada kenyataannya sangat serius. Bayangkan jika
$user_data
berisi<script>SomeNastyScript()</script>
. Itu bisa mengeksploitasi kerentanan yang ada di browser pengguna Anda, atau bisa mengirim cookie non-HTTPOnly (yang mungkin berisi kata sandi yang disimpan) ke penyerang, atau itu bisa menipu pengguna untuk menulis kata sandi mereka pada formulir yang dihasilkan melalui manipulasi DOM (mungkin dalam javascript), atau banyak hal buruk lainnya.Ini disebut XSS (Skrip lintas situs).
Versi pendek
-
Panggil
mysql_real_escape_string
pada string sebelum memasukkannya ke dalam kueri SQL Anda (tetapi tidak saat Andaecho
itu). -
Panggil
htmlspecialchars
pada string sebelum menampilkannya kepada pengguna (tetapi tidak saat Anda memasukkannya ke dalam database).