بريد إلكتروني آمن PHP
- 上一页 PHP E-mail
- 下一页 PHP Error
يوجد ثقب في كود البريد الإلكتروني PHP في الفصل السابق.
PHP إدخال البريد الإلكتروني
أولاً، انظر إلى كود PHP في الفصل السابق:
<html> <body> <?php if (isset($_REQUEST['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 //إذا لم يتم ملء "البريد الإلكتروني"، عرض النموذج { 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 لحماية البريد الإلكتروني
أفضل طريقة لمنع اختراق البريد الإلكتروني هي التحقق من الإدخال.
كود المقطع التالي مشابه لما سبقه، ولكننا أضفنا برنامج التحقق من صحة الإدخال في حقل البريد الإلكتروني في النموذج:
<html> <body> <?php function spamcheck($field) { //تطهير filter_var() للبريد الإلكتروني $field=filter_var($field, FILTER_SANITIZE_EMAIL); //تحقق filter_var() من صحة البريد الإلكتروني if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } } if (isset($_REQUEST['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