آموزش ارسال ایمیل ( Email ) امن به وسیله PHP :

مقدمه :

کد ارسال ایمیل توسط فرم HTML که در بخش قبلی به شما آموزش دادیم ، درای یک نقطه ضعف است . اینکه کاربر می تواند در کادر متن آدرس ایمیل ، بیش از یک ایمیل وارد نموده یا حملات اسکریپتی انجام دهد .
برای حل این موضوع از یک اعتبار سنج داده در 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>


راجع این مطلب سوال یا اشکالی دارید ؟! آن را در انجمن سایت مطرح نمایید ...         >>>>>  ورود به انجمن تخصصی


نطر خودتان درباره این صفحه  :

آیا مطالب این صفحه برای شما مناسب و مفید بوده است :

نام :                 
آدرس Email :    
 
نظر شما :        
سوال امنیتی : جمع سه + پنج چنده ؟