آموزش رایگان PHP

آموزش فیلتر کردن داده‌ها در PHP با توابع filter_var و preg_match

1405/05/13 21:29 محراب حسن زاده
آموزش فیلتر کردن داده‌ها در 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 بروید.

ترکیب هوشمندانه این دو ابزار به شما کمک می‌کند کدهای تمیزتر، بهینه‌تر و از همه مهم‌تر، بسیار امن‌تر بنویسید.


پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آموزش جامع کوکی (Cookie) در PHP + مدیریت اصولی و امنیت آن بر اساس استاندارد گوگل
1405/05/01 20:10

آموزش جامع کوکی (Cookie) در PHP + مدیریت اصولی و امنیت آن بر اساس استاندارد گوگل

مطالعه بیشتر
Async/Await: نوشتن کدهای خواناتر و ناهم‌زمان در جاوا اسکریپت - آموزش کامل با مثال‌ها
1403/07/30 20:50

Async/Await: نوشتن کدهای خواناتر و ناهم‌زمان در جاوا اسکریپت - آموزش کامل با مثال‌ها

مطالعه بیشتر
تفاوت آرایه عددی، انجمنی و چندبعدی در PHP: راهنمای جامع و کاربردی
1405/03/24 01:07

تفاوت آرایه عددی، انجمنی و چندبعدی در PHP: راهنمای جامع و کاربردی

مطالعه بیشتر
آموزش ساختار استاندارد و بهینه پروژه PHP به سبک گوگل
1405/05/04 23:25

آموزش ساختار استاندارد و بهینه پروژه PHP به سبک گوگل

مطالعه بیشتر
آموزش Prepared Statement در PHP: امن‌سازی دیتابیس در برابر SQL Injection
1405/05/13 21:17

آموزش Prepared Statement در PHP: امن‌سازی دیتابیس در برابر SQL Injection

مطالعه بیشتر
راهنمای کامل تگ‌های < img > و < a > در HTML: تصاویر و لینک‌ها
1402/05/21 00:27

راهنمای کامل تگ‌های < img > و < a > در HTML: تصاویر و لینک‌ها

مطالعه بیشتر
آموزش کامل ساخت و افزودن تقویم فارسی به Input (کامل و استاندارد)
1405/03/14 00:07

آموزش کامل ساخت و افزودن تقویم فارسی به Input (کامل و استاندارد)

مطالعه بیشتر
آموزش CSS Transform و Transition: تبدیل‌ها و ایجاد تغییرات ظاهری پویا
1402/06/10 18:32

آموزش CSS Transform و Transition: تبدیل‌ها و ایجاد تغییرات ظاهری پویا

مطالعه بیشتر
آموزش استایل‌دهی لینک‌ها در CSS: طراحی و تنظیمات ساده برای لینک‌های HTML
1402/06/07 00:01

آموزش استایل‌دهی لینک‌ها در CSS: طراحی و تنظیمات ساده برای لینک‌های HTML

مطالعه بیشتر
آموزش تغییر المان‌های DOM: ویرایش متن، سبک‌ها و کلاس‌ها در جاوا اسکریپت - راهنمای کامل با مثال‌ها
1403/08/02 21:01

آموزش تغییر المان‌های DOM: ویرایش متن، سبک‌ها و کلاس‌ها در جاوا اسکریپت - راهنمای کامل با مثال‌ها

مطالعه بیشتر
آموزش ایجاد و حذف المان‌های DOM به صورت داینامیک با جاوا اسکریپت: راهنمای جامع و کاربردی
1403/08/02 21:21

آموزش ایجاد و حذف المان‌های DOM به صورت داینامیک با جاوا اسکریپت: راهنمای جامع و کاربردی

مطالعه بیشتر
درک و استفاده از Watchers در Vue.js | آموزش Watch با مثال کاربردی
1404/09/28 22:00

درک و استفاده از Watchers در Vue.js | آموزش Watch با مثال کاربردی

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد