اعتبارسنجی فرم (PHP Form Validation)
اعتبارسنجیِ فرم: فیلترِ ورودِ دادهها 🛡️🔍
اعتبارسنجی (Validation) یعنی اطمینان از اینکه کاربر دقیقاً همان چیزی را وارد کرده که شما انتظار دارید. مثلاً شماره موبایل فقط عدد باشد یا ایمیل فرمتِ درستی داشته باشد.
امنیت در مقابلِ هکِ PHP_SELF
بسیاری از توسعهدهندگان از $_SERVER["PHP_SELF"] در action فرم استفاده میکنند. این کار خطرناک است! هکرها میتوانند با اضافه کردنِ کدهایِ جاوااسکریپت به پایانِ URL، حملهیِ XSS انجام دهند.
راهکارِ ایمن:
{code_block('// همیشه ورودی را تمیز کنید\n$action = htmlspecialchars($_SERVER["PHP_SELF"]);')}مراحلِ استانداردِ اعتبارسنجی:
- حذفِ فاصلههایِ اضافی: با تابعِ
trim(). - حذفِ بکاسلشها: با تابعِ
stripslashes(). - تبدیلِ تگها به متن خالص: با تابعِ
htmlspecialchars().
تجربهیِ کاربری (UX)
اعتبارسنجیِ خوب باید به کاربر بگوید که "کدام" فیلد اشتباه است و چرا. فقط گفتنِ "خطا رخ داد" کافی نیست.
<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) استفاده کنید که بسیار دقیقتر و ایمنتر است.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
یک متغیر به نام $data حاویِ متنِ مخرب "<script>alert(1)</script>" است. با استفاده از htmlspecialchars() آن را به متنِ بیخطر تبدیل کنید.
<?php
$data = "<script>alert(1)</script>";
echo htmlspecialchars($data);
?>
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.