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,

PHP Keamanan E-mail

Pada e-mail PHP di script, ada celah.


PHP E-mail injeksi

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!


injeksi PHP untuk mencegah E-mail

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:

  • FILTER_SANITIZE_EMAIL Filter menghapus e-mail dari string karakter ilegal
  • Filter FILTER_VALIDATE_EMAIL memverifikasi nilai dari alamat e-mail

Anda dapat di kami PHP Filter Baca lebih lanjut tentang filter pengetahuan.

PHP Keamanan E-mail
10/30