อีเมล์ที่มีความปลอดภัยใน PHP
- หน้าก่อน PHP E-mail
- หน้าต่อไป PHP Error
ในบทก่อนหน้านี้ รหัส PHP e-mail script มีจุดบกพร่อง
PHP E-mail Injection
สุดท้าย โปรดดูรหัส PHP ในบทก่อนหน้านี้
<html> <body> <?php if (isset($_REQUEST['email'])) //ถ้า "email" ได้ถูกบันทึก ส่งอีเมล { //ส่งอีเมล $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 //ถ้า "email" ยังไม่ได้ถูกบันทึก แสดงฟอร์ม { 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>
ปัญหาที่มีในรหัสที่กล่าวถึงคือ ผู้ใช้ที่ไม่มีอำนาจอาจสามารถแอดข้อมูลไปที่ส่วนหัวของอีเมลผ่านการใช้ฟอร์ม
เมื่อผู้ใช้เพิ่มข้อความนี้ในช่องใส่ข้อมูลของฟอร์มในที่สุดจะเกิดอะไรขึ้นมาบ้างเรื่องนี้
someone@example.com%0ACc:person2@example.com %0ABcc:person3@example.com,person3@example.com, anotherperson4@example.com,person5@example.com %0ABTo:person6@example.com
เช่นเดียวกับที่เคยใช้งาน ฟังก์ชัน mail() จะใส่ข้อความดังกล่าวเข้าไปในส่วนหัวของอีเมล ดังนั้นตอนนี้ส่วนหัวของอีเมลมีฟิลด์ Cc:, Bcc: และ To: ที่เพิ่มเติมติดต่อกัน!
PHP ป้องกันการฝังรหัส E-mail
ทางเลือกที่ดีที่สุดเพื่อป้องกันการฝังรหัส e-mail คือการตรวจสอบการกรอกข้อมูล.
รหัสที่มีตัวอย่างดังกล่าวเหมือนกัน แต่เราได้เพิ่มการตรวจสอบการกรอกข้อมูลในฟอร์มที่มีชื่อฟิลด์ email:
<html> <body> <?php function spamcheck($field) { //filter_var() ฟื้นฟูอีเมล //ที่อยู่อีเมลใช้ FILTER_SANITIZE_EMAIL $field=filter_var($field, FILTER_SANITIZE_EMAIL); //filter_var() ตรวจสอบอีเมล //ที่อยู่อีเมลใช้ FILTER_VALIDATE_EMAIL if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } } if (isset($_REQUEST['email'])) {//ถ้า "email" ถูกกรอกเข้าไป ดำเนินการต่อ //ตรวจสอบว่าที่อยู่อีเมลไม่ถูกต้อง $mailcheck = spamcheck($_REQUEST['email']); if ($mailcheck==FALSE) { echo "Invalid input"; } 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 {//if "email" is not filled out, display the form 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 ตรวจสอบที่อยู่อีเมล
คุณสามารถใช้ PHP ฟิลเตอร์ในนี้หน้านี้ คุณสามารถอ่านเกี่ยวกับฟิลเตอร์มากยิ่งขึ้น
- หน้าก่อน PHP E-mail
- หน้าต่อไป PHP Error