Latest web development tutorials
×

PHP หลักสูตร

PHP หลักสูตร PHP แนะนำโดยย่อ PHP ติดตั้ง PHP ไวยากรณ์ PHP ตัวแปร PHP echo/print PHP ชนิดข้อมูล PHP คงที่ PHP เชือก PHP ผู้ประกอบการ PHP If...Else PHP Switch PHP แถว PHP เรียงลำดับอาร์เรย์ PHP Superglobals PHP While การไหลเวียน PHP For การไหลเวียน PHP ฟังก์ชัน PHP ตัวแปรเมจิก PHP namespaces PHP เชิงวัตถุ

PHP ฟอร์ม

PHP ฟอร์ม PHP รูปแบบการตรวจสอบสิทธิ์ PHP ฟอร์ม - ฟิลด์ที่จำเป็น PHP ฟอร์ม - อีเมลยืนยันและ URL PHP ตัวอย่างสมบูรณ์แบบ PHP $_GET ตัวแปร PHP $_POST ตัวแปร

PHP การสอนที่ทันสมัย

PHP อาร์เรย์หลายมิติ PHP วันที่ PHP บรรจุ PHP ไฟล์ PHP อัปโหลดไฟล์ PHP Cookie PHP Session PHP E-mail PHP ความปลอดภัย E-mail PHP Error PHP Exception PHP กรอง PHP กรองขั้นสูง PHP JSON

PHP 7 คุณสมบัติใหม่

PHP 7 คุณสมบัติใหม่

PHP ฐานข้อมูล

PHP MySQL แนะนำโดยย่อ PHP MySQL สัมพันธ์ PHP MySQL การสร้างฐานข้อมูล PHP MySQL สร้างตารางข้อมูล PHP MySQL แทรกข้อมูล PHP MySQL ใส่ข้อมูลหลาย PHP MySQL งบเตรียม PHP MySQL อ่านข้อมูล PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX แนะนำโดยย่อ AJAX PHP AJAX ฐานข้อมูล AJAX XML AJAX ค้นหาแบบ Real-time AJAX RSS Reader AJAX โหวต

PHP คู่มืออ้างอิง

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP การประมวลผลภาพ PHP RESTful

PHP การรักษาความปลอดภัยทาง E-mail

บน PHP E-mail ในสคริปต์ที่มีช่องโหว่


PHP E-mail ในการฉีด

ขั้นแรกให้ดูที่บทสุดท้ายของโค้ด PHP:

<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>

<?php
if (isset($_REQUEST['email'])) { // 如果接收到邮箱参数则发送邮件
	// 发送邮件
	$email = $_REQUEST['email'] ;
	$subject = $_REQUEST['subject'] ;
	$message = $_REQUEST['message'] ;
	mail("[email protected]", $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>

ปัญหาข้างต้นรหัสคือผู้ใช้ไม่ได้รับอนุญาตสามารถแทรกข้อมูลในส่วนหัวของข้อความตามรูปแบบการป้อนข้อมูล

หากผู้ใช้ในรูปแบบของกล่องใส่โดยการเพิ่มข้อความต่อไปนี้ลงในอีเมลสิ่งที่จะเกิดขึ้น?

[email protected]%0ACc:[email protected]
%0ABcc:[email protected],[email protected],
[email protected],[email protected]
%0ABTo:[email protected]

ตามปกติฟังก์ชั่นอีเมล () เพื่อข้อความข้างต้นลงในส่วนหัวของข้อความดังนั้นตอนนี้หัวกับเสริม Cc :, Bcc และเรียนสาขา เมื่อผู้ใช้คลิกที่ปุ่มส่งไปยังอีเมลนี้จะถูกส่งไปยังทุกที่อยู่ด้านบน!


ฉีด PHP เพื่อป้องกันไม่ให้ทาง E-mail

วิธีที่ดีที่สุดในการป้องกันการฉีด E-mail คือการตรวจสอบการป้อนข้อมูล

รหัสต่อไปนี้จะคล้ายกับบทสุดท้าย แต่ที่นี่เราได้เพิ่มการตรวจสอบของการป้อนข้อมูลแบบฟอร์มข้อมูลการตรวจสอบโปรแกรมอีเมล:

<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.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("[email protected]", "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>

ในรหัสข้างต้นเราใช้ตัวกรอง PHP ในการตรวจสอบการป้อนข้อมูล:

  • กรอง FILTER_SANITIZE_EMAIL ลบอีเมลจากสายอักขระที่ผิดกฎหมาย
  • กรอง FILTER_VALIDATE_EMAIL ตรวจสอบค่าของ e-mail address ที่

คุณสามารถของเราในการ กรอง PHP อ่านเพิ่มเติมเกี่ยวกับความรู้ฟิลเตอร์