امنیت در کد ارسال ایمیل
امنیت در کد ارسال ایمیل
یک ضعف در اسکریپت e-mail فصل قبل وجود دارد. ابتدا، به کد آن نگاهی می اندازیم:
<html>
<body>
<?php
//اگر تکست باکس ایمیل پرشده باشد،ایمیل ارسال می شود
if (isset($_REQUEST['email']))
{
//ارسال ایمیل
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید", "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>
مشکل کد بالا این است که کاربران غیرمجاز می توانند از طریق فرم ورودی، درون header نامه، داده درج کنند.
توضیح بیشتر: چه اتفاقی خواهد افتاد اگر کاربر متن زیر را در فیلد ورودی email در فرم اضافه کند؟
این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید%0ACc:این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
%0ABcc:این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید,این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید,
این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید,این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
%0ABTo:این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
تابع ()mail طبق معمول متن بالا را درون header نامه قرار می دهد و اکنون header فیلدهای اضافی cc و Bcc و to را دارد. وقتی که کاربر بر روی دکمه submit کلیک می کند ٫email به تمام آدرس های بالا ارسال خواهد شد!
متوقف کردن تزریقات E-mail در php
بهترین راه برای متوقف کردن تزریقات email، معتبر کردن ورودی است.
کد زیر مانند کد فصل قبل است، اما حالا ما یک معتبرساز وروردی که فیلد email را در فرم چک می کند اضافه کرده ایم:
<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']))
{
//چک می کنیم که آدرس ایمیل معتبر است یا نه
$mailcheck = spamcheck($_REQUEST['email']);
if ($mailcheck==FALSE)
{
echo "Invalid input";
}
else
//ارسال ایمیل
{
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید", "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 می توانید به بخش PHP Filter مراجعه کنید.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
- نوشته شده توسط امیر پهلوان صادق
- بازدید: 15885