PHP أمان البريد الإلكتروني
على البريد الإلكتروني PHP في السيناريو، وهناك ثغرة.
PHP البريد الإلكتروني حقن
أولا، أن ننظر في الفصل الأخير من رمز 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]
وظيفة المعتادة، والبريد () إلى النص أعلاه في رأس الرسالة، حتى الآن على الرأس مع إضافية نسخة :، مخفية: ول: المجالات. عندما ينقر المستخدم على زر الإرسال، على هذا البريد الإلكتروني سيتم إرسالها إلى كل عنوان أعلاه!
PHP حقن لمنع البريد الإلكتروني
أفضل طريقة لمنع حقن البريد الإلكتروني هي للتحقق من صحة الإدخال.
التعليمة البرمجية التالية يشبه الفصل الأخير، ولكن هنا قمنا بزيادة الكشف عن شكل مدخلات مجال التحقق من صحة البرنامج البريد الإلكتروني:
<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 تحقق قيمة من عنوان البريد الإلكتروني
يمكنك في موقعنا PHP تصفية إقرأ المزيد حول المعرفة المرشحات.