فیلتر کردن عبارات در فرم ایمیل php

فیلتر کردن عباراتبلاک کردن ایمیل های حاوی عبارات خاص با فیلتر کردن عبارات خاص

در مطلب جلوگیری از تزریق هدر ایمیل در مورد حفره ی امنیتی email header injection در فرم های php گفتم. حال میخواهم بگویم چگونه ایمیل های حاوی عبارات Bcc و Cc و Content-Type را فیلتر کنیم تا ایمیل های حاوی این عبارات بلاک شود و از گزند تزریق هدر ایمیل در امان بمانیم.

راه حلی که میخواهم بگویم ورودی کاربر را برای عبارات مشکوک بررسی می کند و اگر عبارت مشکوکی پیدا شود متغیری برابر با true می شود ، سپس از این متغیر برای جلوگیری از ارسال ایمیل استفاده می شود.

دستورات شرطی php برای اجرای یک کد روی آزمایش های true و false تکیه دارند بنابر این برای فیلتر کردن عبارات مشکوک در فرم php باید یک متغیر بولین ایجاد کنیم که در صورت پیدا شدن عبارت مشکوک برابر با true شود و در غیر این صورت به صورت پیشفرض برابر با false باشد.

چگونه عبارات مشکوک را در فرم جستجو می کنیم ؟ این شناسایی با استفاده از یک الگوی جستجو یا عبارات منظم regular expression انجام می شود.

ابتدا متغیر را ایجاد می کنیم و برابر با false قرار می دهیم ، همچین عبارات مشکوک را تعیین می کنیم.

رشته ی نسبت داده شده به $pattern چیست ؟ این یک رشته است برای انجام یک جستجوی غیر حساس به بزرگی و کوچکی حروف برای عبارت های زیر :

  • Content-Type
  • Bcc
  • Cc

این رشته ی متنی با یک فرمت خاص با نام عبارت منظم سازگار با پرل ( Perl-compatible Regular Ecpression )نوشته شده است. مخففش می شود PCRE

در این فرمت الگوی جستجو درون یک جفت اسلش / / معمولی قرار می گیرد و i بعد از اسلش آخر یعنی به بزرگی و کوچکی حروف حساس نباش

اکنون می توانیم از PCRE ذخیره شده در $pattern برای فیلتر کردن هر ورودی مشکوک در آرایه ی سوپر گلوبال $_POST استفاده کنیم. طبق مطالبی که پیش تر از این نوشته بودم و فرمی که روی آن آزمایش می کردیم $_POST حاوی یک رشته بود اما در آینده قصد دارم عناصر چند انتخابی مانند چک باکس را به فرم اضافه کنم که خود آن ها آرایه هستند ، پس هم باید در آرایه ی درون آرایه عبارات مشکوک را جستجو کنیم ، هم درون یک رشته.

بدین منظور یک تابع دلخواه میسازیم به نام isSuspect() و درون فایل پردازشگر ایمیل قرار می دهیم که در بالای صفحه اینکلود می کنیم.

توضیح درمورد کد بالا :

نکته ی مهمی در کد بالا وجود دارد و آن آرگومان سوم است که دارای یک & امپرسند است. این بدین معنی است که هر تغییری در متغیر آرگومان سوم تابع یعنی $suspect ایجاد شد در تمام اسکریپت اعمال شود. این تکنیک با نام تحویل دادن به وسیله ی ارجاع passing by refrence شناخته می شود.

امکان دیگر این تابع چیزیست به نام تابع بازگشتی recursive function که تا وقتی که یک مقدار خاص توسط تابع پیدا شود که بتوان با regex مقایسه کرد این تابع به فراخوانی خود ادامه می دهد و وقتی یک مورد منطبق پیدا شود true برگردانده می شود.

تابع بازگشتی را به طور خلاصه می توان تابعی که خود را صدا می زند نامید و اغلب در مواقعی که با یک آرایه سر و کار داریم استفاده می شود. وقتی از تابعی درون خود تابع استفاده می کنیم از این خاصیت استفاده کرده ایم.

تابع را تعریف کردیم تمام. حال باید روی $_Post اجرایش کنیم تا بررسی اش کند

نکته : این بار جلوی $suspect امپرسند وجود ندارد ، & تنها وقتی مورد نیاز بود که تابع را تعریف می کردیم.

اگر عبارت مشکوک پیدا شد $suspect برابر با true می شود کد پردازشگر سوپرگلوبال $_POST را درون یک دستور شرطی قرار می دهیم که وقتی پردازش شودکه مورد مشکوکی وجود نداشت.

اینجا کد پردازشگر ایمیل که خالی نبودن و اجباری بودن فیلد ها را چک میکرد درون یک دستور شرطی قرار می دهم.

در اینجا توضیحی در مورد کد بالا بغیر از خط اول نمی دهم چون بقیه کد ها مربوط به آموزش پردازش فرم php است.

در خط اول گفتیم اگر $suspect برابر با true نبود فرم پردازش شود.

حال یک پیغام خطا هم در بالای صفحه ی فرم ایجاد می کنیم

در اینجا بررسی می شود که آیا _$POST حاوی مقدار است یا نه ، این یعنی فرم ارسال شده یا نه و همزمان بررسی می کند آیا $suspect برابر با true است یا نه یعنی مشکوک است یا نه.

One thought on “فیلتر کردن عبارات در فرم ایمیل php”

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پنج × 3 =