آموزش فیلتر کردن دادهها در PHP با توابع filter_var و preg_match
مقدمه: چرا اعتبارسنجی و فیلتر کردن دادهها حیاتی است؟
هر زمان که وبسایت شما ورودیهایی را از کاربران دریافت میکند (مانند فرمهای تماس، بخش نظرات، فرمهای ثبتنام و خرید)، در معرض خطرات امنیتی جدی قرار میگیرد. عدم اعتبارسنجی مناسب دادههای ورودی، بزرگترین رخنه امنیتی برای حملاتی چون SQL Injection و Cross-Site Scripting (XSS) است. طبق راهنماهای توسعه امن گوگل، طلاییترین قانون این است: «به هیچ ورودی از سمت کاربر اعتماد نکنید!».
در زبان برنامه نویسی PHP، دو ابزار فوقالعاده قدرتمند برای فیلتر و اعتبارسنجی دادهها در اختیار داریم: تابع filter_var برای اعتبارسنجیهای استاندارد و سریع، و تابع preg_match برای بررسی الگوهای سفارشی با استفاده از عبارات باقاعده (Regular Expressions). در این مقاله به بررسی عمیق هر دو ابزار میپردازیم.
بخش اول: اعتبارسنجی و پاکسازی دادهها با تابع filter_var
تابع filter_var یکی از بهترین و بهینهترین توابع داخلی PHP برای فیلتر کردن دادهها است. این تابع دو کار اصلی انجام میدهد:
- اعتبارسنجی (Validation): بررسی میکند که آیا داده ورودی ساختار صحیحی دارد یا خیر (مثلا بررسی صحت ساختار ایمیل).
- پاکسازی (Sanitization): کاراکترهای غیرمجاز و مخرب را از داده ورودی حذف میکند (مثلا حذف تگهای HTML از یک رشته متنی).
۱. اعتبارسنجی آدرس ایمیل
برای بررسی اینکه آیا فرمت ایمیل وارد شده توسط کاربر صحیح است، از ثابت FILTER_VALIDATE_EMAIL استفاده میکنیم:
$email = "user@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "ایمیل وارد شده معتبر است.";
} else {
echo "ایمیل وارد شده نامعتبر است!";
}
۲. پاکسازی رشتهها (Sanitization)
برای جلوگیری از اجرای تگهای مخرب HTML که توسط هکرها ارسال میشوند، میتوانیم کاراکترهای خاص را فیلتر کنیم. در نسخههای جدید PHP، ثابت FILTER_SANITIZE_SPECIAL_CHARS برای این کار بسیار مناسب است:
$comment = "< script > alert ( 'Hacked!' ) ; < / script > -- عالی بود!";
$clean_comment = filter_var($comment, FILTER_SANITIZE_SPECIAL_CHARS);
echo $clean_comment;
// خروجی تگهای اسکریپت را بیاثر کرده و به صورت متن ساده نمایش میدهد.
۳. اعتبارسنجی آدرس وبسایت (URL)
برای اطمینان از اینکه کاربر یک لینک وب معتبر وارد کرده است، از FILTER_VALIDATE_URL استفاده میکنیم:
$url = "https://google.com";
if (filter_var($url, FILTER_VALIDATE_URL)) {
echo "آدرس وبسایت معتبر است.";
} else {
echo "آدرس وبسایت نامعتبر است!";
}
بخش دوم: اعتبارسنجی پیشرفته با preg_match و عبارات باقاعده (Regex)
گاهی اوقات فیلترهای پیشفرض PHP برای نیازهای اختصاصی ما کافی نیستند. به عنوان مثال، ساختار شماره موبایلهای ایران یا کدهای ملی نیاز به اعتبارسنجی با فرمت خاصی دارد. در این سناریوها، تابع preg_match به کمک ما میآید.
این تابع یک الگو (Pattern) دریافت کرده و بررسی میکند که آیا داده ورودی با آن الگو همخوانی دارد یا خیر.
۱. اعتبارسنجی شماره موبایل ایران
یک شماره موبایل معتبر در ایران معمولاً با 09 شروع شده و دارای ۱۱ رقم است. الگوی عبارات باقاعده برای این مورد به شکل زیر خواهد بود:
$phone = "09123456789";
$pattern = "/^09[0-9]{9}$/";
if (preg_match($pattern, $phone)) {
echo "شماره موبایل صحیح است.";
} else {
echo "شماره موبایل باید با 09 شروع شده و 11 رقم باشد.";
}
۲. اعتبارسنجی نام کاربری امن
اگر بخواهید نام کاربری کاربران فقط شامل حروف انگلیسی، اعداد و خط تیره زیرین (Underline) باشد و طول آن بین ۵ تا ۱۵ کاراکتر باشد، از این الگو استفاده کنید:
$username = "user_name123";
$pattern = "/^[a-zA-Z0-9_]{5,15}$/";
if (preg_match($pattern, $username)) {
echo "نام کاربری مجاز است.";
} else {
echo "نام کاربری نامعتبر است (باید بین 5 تا 15 کاراکتر و بدون نمادهای خاص باشد).";
}
جدول مقایسه: filter_var در مقابل preg_match
| ویژگی | filter_var | preg_match |
|---|---|---|
| سرعت اجرا | بسیار سریع (سیستمی) | کمی کندتر (پردازش الگو) |
| انعطافپذیری | محدود به فیلترهای پیشفرض | بینهایت انعطافپذیر و سفارشی |
| پاکسازی دادهها | پشتیبانی عالی (Sanitize) | نیاز به توابع جانبی مثل preg_replace |
نتیجهگیری و بهترین شیوه اجرایی
بر اساس اصول طراحی استاندارد گوگل، همواره توصیه میشود برای اعتبارسنجیهای عمومی نظیر ایمیل، آدرس وبسایت و آدرسهای IP ابتدا از تابع بهینه filter_var استفاده کنید. در صورتی که نیاز به اعتبارسنجی ساختارهای بومی و اختصاصی (مانند شماره تلفن ایران، کدملی یا قالبهای رمز عبور پیچیده) داشتید، به سراغ موتور قدرتمند عبارات باقاعده با تابع preg_match بروید.
ترکیب هوشمندانه این دو ابزار به شما کمک میکند کدهای تمیزتر، بهینهتر و از همه مهمتر، بسیار امنتر بنویسید.
پرسش و پاسخ
نظری یافت نشد
برای ارسال نظر ابتدا وارد شوید