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

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


پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آموزش جامع و استاندارد کار با آرایه‌ها در PHP (راهنمای گوگل)
1405/03/24 01:04

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

مطالعه بیشتر
آموزش گام به گام ساخت سیستم لاگین و لاگ‌اوت در PHP به صورت ایمن
1405/05/14 22:13

آموزش گام به گام ساخت سیستم لاگین و لاگ‌اوت در PHP به صورت ایمن

مطالعه بیشتر
استفاده از overflow در CSS برای مدیریت محتوای اضافی: راهنمای کامل و کاربردی
1403/08/11 21:37

استفاده از overflow در CSS برای مدیریت محتوای اضافی: راهنمای کامل و کاربردی

مطالعه بیشتر
آموزش جامع توابع بازگشتی (Recursion) و کاربردهای آن در جاوا اسکریپت: مثال‌ها و مفاهیم
1403/07/29 20:15

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

مطالعه بیشتر
مقایسه کامل و جامع MySQLi و PDO در PHP: کدام یک برای پروژه شما مناسب‌تر است؟
1405/05/04 23:45

مقایسه کامل و جامع MySQLi و PDO در PHP: کدام یک برای پروژه شما مناسب‌تر است؟

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

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

مطالعه بیشتر
آموزش گام به گام طراحی مگا منو (Mega Menu) مدرن با CSS و HTML
1405/03/13 23:44

آموزش گام به گام طراحی مگا منو (Mega Menu) مدرن با CSS و HTML

مطالعه بیشتر
آموزش کامل حلقه foreach در PHP برای پیمایش آرایه‌ها (به زبان ساده)
1405/04/16 00:37

آموزش کامل حلقه foreach در PHP برای پیمایش آرایه‌ها (به زبان ساده)

مطالعه بیشتر
آموزش تگ‌های زمان و مکان در HTML: استفاده از time و location در صفحات وب
1402/05/29 21:13

آموزش تگ‌های زمان و مکان در HTML: استفاده از time و location در صفحات وب

مطالعه بیشتر
تفاوت Session و Cookie در PHP؛ راهنمای جامع و کاربردی طبق استاندارد گوگل
1405/05/01 20:14

تفاوت Session و Cookie در PHP؛ راهنمای جامع و کاربردی طبق استاندارد گوگل

مطالعه بیشتر
مدیریت فرم‌ها و ورودی‌ها در Vue.js | آموزش Form Handling با مثال کاربردی
1404/09/22 00:40

مدیریت فرم‌ها و ورودی‌ها در Vue.js | آموزش Form Handling با مثال کاربردی

مطالعه بیشتر
آموزش جامع تعریف تابع سفارشی در PHP طبق استاندارد گوگل و PSR
1405/04/16 01:07

آموزش جامع تعریف تابع سفارشی در PHP طبق استاندارد گوگل و PSR

مطالعه بیشتر

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