Email Aman PHP
- Halaman Sebelumnya E-mail PHP
- Halaman Berikutnya Error PHP
Ada sebuah kelebihan di skrip e-mail PHP di bagian sebelumnya.
PHP E-mail Injeksi
Awalnya, lihat kode PHP di bagian sebelumnya:
<html> <body> <?php if (isset($_REQUEST['email'])) //jika "email" diisi, kirim email { //kirim email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("someone@example.com", "Subjek: $subject", $message, "Dari: $email" ); echo "Terima kasih atas penggunaan formulir email kami"; } else //jika "email" belum diisi, tampilkan formulir { echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text' /><br /> Subjek: <input name='subject' type='text' /><br /> Pesan:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html>
Masalah yang ada dalam kode di atas adalah, pengguna yang belum berwenang dapat memasukkan data di header email melalui formulir yang diisi.
Jika pengguna menambahkan teks ini ke kotak teks dalam formulir, apa yang akan terjadi?
someone@example.com%0ACc:person2@example.com %0ABcc:person3@example.com,person3@example.com, anotherperson4@example.com,person5@example.com %0ATo:person6@example.com
Seperti biasa, fungsi mail() menempatkan teks di header email, jadi sekarang header memiliki field tambahan Cc:, Bcc: serta To:. Ketika pengguna menekan tombol submit, email ini akan dikirim ke semua alamat di atas!
Pencegahan Injeksi Email PHP
Cara terbaik untuk mencegah injeksi email adalah memvalidasi input.
Kode di bawah ini mirip dengan bagian sebelumnya, namun kami telah menambahkan program verifikasi input field email di form:
<html> <body> <?php function spamcheck($field) { //filter_var() membersihkan email $field=filter_var($field, FILTER_SANITIZE_EMAIL); //filter_var() memvalidasi email if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } } if (isset($_REQUEST['email'])) //jika "email" diisi, lanjutkan //cek apakah alamat email tidak valid $mailcheck = spamcheck($_REQUEST['email']); if ($mailcheck==FALSE) { echo "Input tidak valid"; } else //kirim email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("someone@example.com", "Subjek: $subject", $message, "Dari: $email" ); echo "Terima kasih atas penggunaan formulir email kami"; } } else {//jika "email" belum diisi, tampilkan formulir echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text' /><br /> Subjek: <input name='subject' type='text' /><br /> Pesan:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html>
Pada kode di atas, kami menggunakan filter PHP untuk memvalidasi input:
- FILTER_SANITIZE_EMAIL menghapus karakter ilegal email dari string
- FILTER_VALIDATE_EMAIL memverifikasi alamat email
Anda dapat mengakses di Filter PHPBaca lebih banyak tentang filter di bagian ini.
- Halaman Sebelumnya E-mail PHP
- Halaman Berikutnya Error PHP