ایمیل امن در PHP
- Previous Page PHP E-mail
- Next Page PHP Error
در کد PHP ایمیل در بخش قبلی، یک حفره وجود دارد.
تزریق ایمیل PHP
اول از همه، به کد PHP در بخش قبلی نگاه کنید:
<html> <body> <?php اگر (isset($_REQUEST['email'])) //اگر "ایمیل" پر شده باشد، ایمیل ارسال شود { //ایمیل ارسال شود ایمیل = $_REQUEST['email']; موضوع = $_REQUEST['subject']; پیام = $_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 دستور spamcheck($field) { // filter_var() ایمیل را پاکسازی میکند // استفاده از FILTER_SANITIZE_EMAIL برای آدرس $field = filter_var($field, FILTER_SANITIZE_EMAIL); // filter_var() ایمیل را بررسی میکند // استفاده از FILTER_VALIDATE_EMAIL برای آدرس اگر (filter_var($field, FILTER_VALIDATE_EMAIL)) { بازگردان TRUE; } else { بازگردان FALSE; } } اگر (isset($_REQUEST['email'])) {// اگر "ایمیل" پر شده باشد، ادامه دهید // بررسی آدرس ایمیل نامعتبر $mailcheck = spamcheck($_REQUEST['email']); اگر ($mailcheck==FALSE) { echo "ورودی نامعتبر"; } else {// ارسال ایمیل ایمیل = $_REQUEST['email']; موضوع = $_REQUEST['subject']; پیام = $_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>
In the above code, we used PHP filters to validate the input:
- FILTER_SANITIZE_EMAIL Removes illegal characters from the email string
- FILTER_VALIDATE_EMAIL Validates email address
You can find more about our PHP FilterRead more about filters in this section.
- Previous Page PHP E-mail
- Next Page PHP Error