ارسال ایمیل ( Email ) امن به وسیله PHP
کد ارسال ایمیل توسط فرم HTML که در بخش قبلی به شما آموزش دادیم ، درای یک نقطه ضعف است. اینکه کاربر می تواند در کادر متن آدرس ایمیل ، بیش از یک ایمیل وارد نموده یا حملات اسکریپتی انجام دهد.
اعضای شبکه مشاوران در حوزه «برنامهنویسی، وب و امنیت سایبری»
طاهره حسن زاده
تحلیلگر داده و مشاور یادگیریماشین و دیپ لرنینگ
اگر به مهارت های یک تحلیلگر داده با تجربه در...
فرید تشیعی
متخصص، استراتژیست و مشاور سئو (SEO)
اگر در پیاده سازی، تعیین استراتژی، بوت کمپ یا مدیریت...
بنفشه سیدکباری
مشاور تحقیقات بازار، بازاریابی و فروش
اگر علاقمندید در تراز شرکتهای بزرگ و صاحبنام، بخش بازاریابی...
سپیده گونجی
مشاور SEO ،UI/UX و بازاریابی دیجیتال
اگر قصد دارید در دنیای دیجیتال فعالیت کرده و در...
نیکا تهرانی
متخصص و مشاور سئو تکنیکال
اگر به استراتژیهای حرفهای سئو در موتور جستجوی گوگل از...
فاطمه مدیحی
مشاور برنامه نویسی جاوا اسکریپت، CSS و HTML
اگر به کمک شخصی با تجربه در برنامه نویسی Front-End...
ویدا رضایی
مشاور برنامه نویسی و طراحی وردپرس
اگر برای طراحی سایت وردپرسی خود به تجربیات و دانش...
احسان مهدوی
مشاور شبکه، نرم افزار و هوش مصنوعی
اگر به دنبال رفع چالشهای شبکه، نرمافزار و امنیت فضای...
برای حل این موضوع از یک اعتبارسنج داده در PHP استفاده می کنیم . ابتدا نگاهی به کد PHP بخش قبل بیندازیم :
مثال | <html> <body> <?php if (isset($_REQUEST[’email’])) // دستور بالا در صورتی که کادر ایمیل پر شده باشد ، ایمیل را ارسال می کند { // ارسال ایمیل $email = $_REQUEST[’email’] ; $subject = $_REQUEST[‘subject’] ; $message = $_REQUEST[‘message’] ; mail ( “someone@example.com” , $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> |
اگر در کد بالا و در کادر متن آدرس ایمیل ، کاربر برای مثال متن زیر را وارد نماید ، آنگاه چه اتفاقی می افتد ؟!
مد مخرب | 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 ، آدرس های فوق را به عنوان هدرهای ایمیل ثبت کرده و ایمیل را به همه آنها ( Bcc , Cc , To , … ) ارسال می کند . این کار مطابق نظر وب مستر نبوده و برنامه را ممکن است دچار مشکل نماید .
اما راه حل چیست ؟!
جلوگیری از حملات اسکریپتی PHP در تابع ( ) mail :
راه حل جلوگیری از حملات اسکریپتی در PHP ، اعتبار سنجی اطلاعات ورودی قبل از ارسال فرم است .
در کد زیر که اصلاح شده کد قبلی است ، دو تابع را به کد اضافه کرده ایم که اطلاعات وارد شده در فرم را اعتبار سنجی کرده و در صورتی که دارای فرمت صحیح یک ایمیل باشد ، اجازه Submit فرم را می دهد .
توضیحات بیشتر را درون مثال ذکر کرده ایم :
نکات :
1 . تابع ( ) FILTER_SANITIZE_EMAIL ، کاراکترهایی اضافی که در ایمیل وارد شده اند را حذف می کند .
2 . تاع ( ) FILTER_VALIDATE_EMAIL ، بررسی می کند که آیا ایمیل وارد شده فرمت صحیح یک ایمیل را دارد یا خیر .
برای دریافت اطلاعات بیشتر ، به بخش اعتبار سنجی مقادیر ورودی در PHP بروید .
مثال ارسال ایمیل صحیح |
<html> <body> <?php function spamcheck($field) { // این تابع کاراکترهای غیر مجاز در آدرس ایمیل را پاک می کند $field=filter_var($field, FILTER_SANITIZE_EMAIL);// این تابع فرمت ایمیل را بررسی کرده و در صورت داشتن فرمت مقدار مثبت بر می گرداند if( filter_var($field, FILTER_VALIDATE_EMAIL) ) { return TRUE; } else { return FALSE; } }if (isset($_REQUEST[’email’])) { // در مرحله اول چک می شود آیا مقداری برای ایمیل وارد شده یا خیر //check if the email address is invalid $mailcheck = spamcheck($_REQUEST[’email’]); if ($mailcheck==FALSE) { echo “فرمت نا صحیح”; } 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 { // اگر ایمل وارد نشده باشد ، فرم زیر را نمایش می دهد 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> |