Pada script email PHP pada bagian sebelumnya terdapat kerentanan.
Pertama, lihat kode PHP dari bab sebelumnya:
<html><head><meta charset="utf-8"><title>Tutorial Pembuat Kode (codercto.com)</title></head><body><?phpif (isset($_REQUEST['email' ] )) { // Jika parameter email diterima, kirim email // Kirim email $email = $_REQUEST['email'] ; $_REQUEST['message'] ; mail("[email protected]", $subject, $message, "From:" . $email); parameter lalu Tampilkan form echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text'><br> Subject: <input name='subject' type='text'><br> Pesan:<br> <textarea name='message' row='15' cols='40'> </textarea><br> <input type='submit'> </form >";}?></tubuh></html>
Masalah dengan kode di atas adalah pengguna yang tidak berwenang dapat memasukkan data ke header email melalui formulir input.
Apa yang akan terjadi jika pengguna menambahkan teks berikut ke email di kotak input formulir?
[email protected]%0ACc:[email protected]%0ABcc:[email protected],[email protected],[email protected],[email protected]%0ABTo:[email protected]
Seperti biasa, fungsi mail() menempatkan teks di atas ke dalam header email, sehingga header sekarang memiliki kolom tambahan Cc:, Bcc:, dan To:. Ketika pengguna mengklik tombol kirim, email ini akan dikirim ke semua alamat di atas!
Cara terbaik untuk mencegah injeksi email adalah dengan memvalidasi masukan.
Kode berikut ini mirip dengan yang ada di bab sebelumnya, namun di sini kami telah menambahkan validator input untuk mendeteksi kolom email di formulir:
<html><head><meta charset="utf-8"><title>Tutorial Pembuat Kode (codercto.com)</title></head><body><?phpfunction spamcheck($field){ // filter_var ( ) Filter email // Gunakan FILTER_SANITIZE_EMAIL $field=filter_var($field, FILTER_SANITIZE_EMAIL); //filter_var() Filter email // Gunakan FILTER_VALIDATE_EMAIL if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; }}if (isset($_REQUEST['email'])){ // Jika parameter email diterima, kirim email // Tentukan apakah email tersebut legal $mailcheck = spamcheck($_REQUEST['email']); ($mailcheck==FALSE) { echo "Masukan ilegal"; } else { // Kirim email $email = $_REQUEST['email'] ; $subjek = $_REQUEST['subjek'] ; pesan'] ; surat("[email protected]", "Subjek: $subjek", $pesan, "Dari: $email" ); untuk menggunakan formulir email kami"; }}else{ // Jika tidak ada parameter email, tampilkan formulir echo "<form method='post' action='mailform.php'> Email: <input name='email' type ='text '><br> Perihal: <input nama='subjek' type='teks'><br> Pesan:<br> <textarea name='message' row='15' cols='40'> </textarea><br> <input type='submit'> </form>";}?></body></html>
Pada kode di atas, kami menggunakan filter PHP untuk memvalidasi input:
Filter FILTER_SANITIZE_EMAIL menghapus karakter email ilegal dari string
Filter FILTER_VALIDATE_EMAIL memvalidasi nilai alamat email
Anda dapat membaca lebih lanjut tentang filter di Filter PHP kami.