توجد ثغرة أمنية في البرنامج النصي للبريد الإلكتروني الخاص بـ PHP في القسم السابق.
أولاً، انظر إلى كود PHP من الفصل السابق:
<html><head><meta charset="utf-8"><title>البرنامج التعليمي للمبرمج (codercto.com)</title></head><body><?phpif (isset($_REQUEST['email' ] )) { // إذا تم استلام معلمة البريد الإلكتروني، أرسل بريدًا إلكترونيًا // أرسل بريدًا إلكترونيًا $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $_REQUEST['message'] ; mail("[email protected]"، $subject, $message, "From:" . $email); echo "تم إرسال البريد بنجاح";} else { // إذا لم يكن هناك بريد إلكتروني المعلمة ثم عرض صدى النموذج "<form Method='post' action='mailform.php'> البريد الإلكتروني: <input name='email' type='text'><br> الموضوع: <input name='subject' type='text'><br> الرسالة:<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]
كالعادة، تقوم الدالة mail() بوضع النص أعلاه في رأس البريد الإلكتروني، بحيث يحتوي الرأس الآن على حقول إضافية نسخة إلى: ونسخة مخفية الوجهة: وإلى:. عندما ينقر المستخدم على زر الإرسال، سيتم إرسال هذا البريد الإلكتروني إلى جميع العناوين المذكورة أعلاه!
أفضل طريقة لمنع إدخال البريد الإلكتروني هي التحقق من صحة الإدخال.
التعليمة البرمجية التالية مشابهة لتلك الموجودة في الفصل السابق، لكننا هنا أضفنا أداة التحقق من صحة الإدخال للكشف عن حقل البريد الإلكتروني في النموذج:
<html><head><meta charset="utf-8"><title>البرنامج التعليمي للمبرمج (codercto.com)</title></head><body><?phpfunction 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'])){ // إذا تم استلام معلمة البريد الإلكتروني، أرسل البريد الإلكتروني // تحديد ما إذا كان البريد الإلكتروني قانونيًا $mailcheck = spamcheck($_REQUEST['email']); ($mailcheck==FALSE) { echo "إدخال غير قانوني" } else { // إرسال بريد إلكتروني $email = $_REQUEST['email'] ; message'] ; mail("[email protected]", "Subject: $subject", $message, "From: $email" ); لاستخدام نموذج البريد الخاص بنا"; }}else{ // إذا لم تكن هناك معلمة بريد إلكتروني، فاعرض النموذج echo "<form Method='post' action='mailform.php'> البريد الإلكتروني: <input name='email' type ='text '><br> الموضوع: <input name='subject' type='text'><br> الرسالة:<br> <textarea name='message'rows='15' cols='40'> </textarea><br> <input type='submit'> </form>";}?></body></html>
في الكود أعلاه، نستخدم مرشح PHP للتحقق من صحة الإدخال:
يقوم مرشح FILTER_SANITIZE_EMAIL بإزالة الأحرف غير القانونية للبريد الإلكتروني من السلسلة
يقوم عامل التصفية FILTER_VALIDATE_EMAIL بالتحقق من صحة قيمة عنوان البريد الإلكتروني
يمكنك قراءة المزيد عن المرشحات في مرشح PHP الخاص بنا.