Tutorial PHP Keamanan E-mail Terbaik Pada tahun 2024, Dalam tutorial ini Anda dapat mempelajari PHP E-mail injeksi,injeksi PHP untuk mencegah E-mail,
Pada e-mail PHP di script, ada celah.
Pertama, melihat bab terakhir dari kode PHP:
<html> <head> <meta charset="utf-8"> <title>本教程(w3write.com)</title> </head> <body> <?php if (isset($_REQUEST['email'])) { // 如果接收到邮箱参数则发送邮件 // 发送邮件 $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("someone@example.com", $subject, $message, "From:" . $email); echo "邮件发送成功"; } else { // 如果没有邮箱参数则显示表单 echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text'><br> Subject: <input name='subject' type='text'><br> Message:<br> <textarea name='message' rows='15' cols='40'> </textarea><br> <input type='submit'> </form>"; } ?> </body> </html>
Masalah di atas kode adalah bahwa pengguna yang tidak sah dapat memasukkan data dalam header pesan dengan bentuk masukan.
Jika pengguna dalam bentuk kotak input dengan menambahkan teks berikut ke email, apa yang akan terjadi?
someone@example.com%0ACc:person2@example.com %0ABcc:person3@example.com,person3@example.com, anotherperson4@example.com,person5@example.com %0ABTo:person6@example.com
Seperti biasa, mail () fungsi untuk teks di atas ke dalam header pesan, jadi sekarang kepala dengan tambahan Cc :, Bcc: dan To: bidang. Ketika pengguna mengklik tombol submit, untuk e-mail akan dikirim ke semua alamat di atas!
Cara terbaik untuk mencegah injeksi e-mail adalah untuk memvalidasi input.
Kode berikut ini mirip dengan bab terakhir, tetapi di sini kita telah meningkatkan deteksi bentuk masukan bidang program validasi email:
<html> <head> <meta charset="utf-8"> <title>本教程(w3write.com)</title> </head> <body> <?php function spamcheck($field) { // filter_var() 过滤 e-mail // 使用 FILTER_SANITIZE_EMAIL $field=filter_var($field, FILTER_SANITIZE_EMAIL); //filter_var() 过滤 e-mail // 使用 FILTER_VALIDATE_EMAIL if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } } if (isset($_REQUEST['email'])) { // 如果接收到邮箱参数则发送邮件 // 判断邮箱是否合法 $mailcheck = spamcheck($_REQUEST['email']); if ($mailcheck==FALSE) { echo "非法输入"; } else { // 发送邮件 $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("someone@example.com", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } } else { // 如果没有邮箱参数则显示表单 echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text'><br> Subject: <input name='subject' type='text'><br> Message:<br> <textarea name='message' rows='15' cols='40'> </textarea><br> <input type='submit'> </form>"; } ?> </body> </html>
Pada kode di atas, kita menggunakan filter PHP untuk memverifikasi input:
Anda dapat di kami PHP Filter Baca lebih lanjut tentang filter pengetahuan.