دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / اعتبارسنجی ایمیل و آدرس (PHP Form URL/E-mail)

اعتبارسنجی ایمیل و آدرس (PHP Form URL/E-mail)

30 دقیقه Article

اعتبارسنجیِ تخصصی: ایمیل و وب‌سایت 📧🌐

بررسیِ ساختارِ یک آدرسِ ایمیل یا یک URL فراتر از یک چک کردنِ ساده برایِ خالی نبودن است. خوشبختانه PHP ابزارهایِ بسیار دقیقی برایِ این کار دارد.

۱. استفاده از Filter Var (روشِ پیشنهادی)

بهترین و ساده‌ترین راه. PHP ورژن‌هایِ مختلفِ این استانداردها را می‌شناسد.

{code_block('if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {\n $emailErr = "فرمت ایمیل نامعتبر است";\n}')}

۲. استفاده از RegEx (برایِ نام و نام خانوادگی)

مثلاً برایِ اینکه مطمئن شویم نام فقط شاملِ حروف و فاصله است:

{code_block('if (!preg_match("/^[a-zA-Z-' ]*$/", $name)) {\n $nameErr = "فقط حروف و فاصله مجاز است";\n}')}

اعتبارسنجیِ URL:

برایِ اینکه مطمئن شوید کاربر یک آدرسِ معتبر سایت وارد کرده است:

{code_block('if (!filter_var($website, FILTER_VALIDATE_URL)) {\n $websiteErr = "آدرس سایت اشتباه است";\n}')}
ایمیل‌هایِ فیک (Disposable): اعتبارسنجیِ فرمت فقط می‌گوید ظاهرِ ایمیل درست است (مثل a@b.com). برایِ اینکه مطمئن شوید ایمیل واقعی است، باید یک ایمیلِ تایید (Verification) برایِ کاربر بفرستید.
فیلترهایِ بیشتر: PHP فیلترهایی برایِ FILTER_VALIDATE_IP، FILTER_VALIDATE_INT و حتی FILTER_VALIDATE_BOOLEAN هم دارد.
امنیت در RegEx: همیشه سعی کنید الگوهایِ رگکس خود را محدود نگه دارید تا از حملاتِ ReDoS (از کار انداختن سرور با رگکس‌هایِ بسیار پیچیده) جلوگیری شود.
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: امنیت و مدیریتِ پیشرفته‌یِ فرم‌ها 🐘🛡️

در دنیایِ واقعی، فرم‌ها خطرناک‌ترین بخشِ اپلیکیشنِ شما هستند. هکرها از طریقِ فرم‌ها سعی می‌کنند کدهایِ مخرب تزریق کنند یا داده‌هایِ شما را سرقت کنند.

۱. امنیت در برابر XSS (تزریق کد)

هرگز داده‌یِ کاربر را بدونِ پاکسازی چاپ نکنید. تابعِ htmlspecialchars() کاراکترهایی مثل < و > را به کدهایِ بی‌خطر تبدیل می‌کند تا مرورگر آن‌ها را به عنوانِ تگِ HTML اجرا نکند.

۲. تکنیکِ CSRF Protection

برایِ جلوگیری از این که یک مهاجم از طرفِ کاربرِ شما فرمی را ارسال کند، باید از یک Token امنیتیِ یکبار مصرف در هر فرم استفاده کنید. این توکن در سمتِ سرور چک می‌شود تا تایید شود فرم واقعاً از سایتِ خودتان ارسال شده است.

۳. استفاده از Filter Extension

PHP دارایِ یک افزونه‌یِ داخلیِ قدرتمند برایِ اعتبارسنجی است. به جایِ نوشتنِ رگکس‌هایِ پیچیده برایِ ایمیل، از filter_var($email, FILTER_VALIDATE_EMAIL) استفاده کنید که بسیار دقیق‌تر و ایمن‌تر است.

نکته مهندسی: همیشه از متد POST برایِ ارسالِ داده‌هایِ حساس استفاده کنید. داده‌هایِ GET در تاریخچه‌یِ مرورگر (History) و لاگ‌هایِ سرور باقی می‌مانند که یک ریسکِ امنیتیِ بزرگ است.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

اعتبارسنجی ایمیل Medium
سوال تمرین

با استفاده از تابعِ filter_var و ثابتِ FILTER_VALIDATE_EMAIL، چک کنید آیا "test@example.com" معتبر است؟ اگر بود Valid را چاپ کنید.

پاسخ تمرین
PHP
<?php
$email = "test@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
  echo "Valid";
}
?>

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.