آموزش رایگان 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 بروید.

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


پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

پارامترها و بازگشت از توابع در جاوا اسکریپت: نحوه تعریف و مدیریت خروجی‌ها
1402/11/02 23:32

پارامترها و بازگشت از توابع در جاوا اسکریپت: نحوه تعریف و مدیریت خروجی‌ها

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

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

مطالعه بیشتر
آموزش جامع اینترفیس‌ها و کلاس‌ها (Classes) در ES6 جاوا اسکریپت: مفاهیم و کاربردها
1403/07/28 21:31

آموزش جامع اینترفیس‌ها و کلاس‌ها (Classes) در ES6 جاوا اسکریپت: مفاهیم و کاربردها

مطالعه بیشتر
آشنایی با Vue CLI و ایجاد پروژه‌های پیشرفته در Vue.js | راهنمای کامل
1404/09/29 21:09

آشنایی با Vue CLI و ایجاد پروژه‌های پیشرفته در Vue.js | راهنمای کامل

مطالعه بیشتر
آموزش جامع حلقه‌های for و while در جاوا اسکریپت: نحوه استفاده و کاربردها
1402/11/02 23:10

آموزش جامع حلقه‌های for و while در جاوا اسکریپت: نحوه استفاده و کاربردها

مطالعه بیشتر
آموزش کامل کار با اعداد و توابع ریاضی در PHP (کامل و کاربردی)
1405/04/27 21:51

آموزش کامل کار با اعداد و توابع ریاضی در PHP (کامل و کاربردی)

مطالعه بیشتر
راهنمای جامع قوانین نام‌گذاری متغیرها در PHP بر اساس استاندارد گوگل
1405/03/24 00:57

راهنمای جامع قوانین نام‌گذاری متغیرها در PHP بر اساس استاندارد گوگل

مطالعه بیشتر
آموزش جامع دستور SELECT و نمایش اطلاعات دیتابیس طبق استانداردهای گوگل و سئو
1405/05/13 21:07

آموزش جامع دستور SELECT و نمایش اطلاعات دیتابیس طبق استانداردهای گوگل و سئو

مطالعه بیشتر
آموزش ایجاد Transitions و انیمیشن‌های صفحه بارگذاری (Loader) در CSS: طراحی لودرهای جذاب
1403/08/16 23:05

آموزش ایجاد Transitions و انیمیشن‌های صفحه بارگذاری (Loader) در CSS: طراحی لودرهای جذاب

مطالعه بیشتر
استفاده از font face در CSS برای اضافه کردن فونت‌های سفارشی: راهنمای کامل
1403/08/16 21:48

استفاده از font face در CSS برای اضافه کردن فونت‌های سفارشی: راهنمای کامل

مطالعه بیشتر
آموزش جامع و گام‌به‌گام حلقه for در PHP + مثال‌های کاربردی
1405/04/04 00:11

آموزش جامع و گام‌به‌گام حلقه for در PHP + مثال‌های کاربردی

مطالعه بیشتر
آموزش جامع Session در PHP به زبان ساده + پروژه عملی شبیه‌ساز
1405/05/01 20:07

آموزش جامع Session در PHP به زبان ساده + پروژه عملی شبیه‌ساز

مطالعه بیشتر

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