تکمیل فرم (PHP Form Complete)
پروژهیِ نهایی: فرمِ کامل و ایمن 🏗️🚀
در این بخش، تمامِ قطعاتِ پازل را کنارِ هم میگذاریم. یک فرمِ کامل که هم دادهها را میگیرد، هم آنها را پاکسازی میکند و هم خطاهایِ مناسب را نمایش میدهد.
۱. متغیرهایِ وضعیت (State)
ما نیاز داریم مقادیری که کاربر وارد کرده را "نگه داریم" تا اگر فرم خطایی داشت و دوباره لود شد، کاربر مجبور نشود همه چیز را از اول تایپ کند.
{code_block('// مثال در فیلد HTML\nvalue="<?php echo $name; ?>"')}ساختارِ فایلِ نهایی:
- بخشِ منطق: تعریفِ متغیرها و تابعِ
test_input(). - بخشِ پردازش: چک کردنِ
$_SERVER["REQUEST_METHOD"] == "POST". - بخشِ نمایش: نمایشِ فرم و پیامهایِ خطا.
پاکسازیِ نهایی:
{code_block('function test_input($data) {\n $data = trim($data);\n $data = stripslashes($data);\n $data = htmlspecialchars($data);\n return $data;\n}')}قدمِ بعدی چیه؟
حالا که فرمها را بلدید، میتوانید دادهها را به جایِ چاپ کردن، در یک دیتابیس ذخیره کنید یا یک سیستمِ لاگینِ واقعی بسازید. این شروعِ مسیرِ شما برایِ ساختِ پنلهایِ مدیریتی است.
بخش تخصصی: امنیت و مدیریتِ پیشرفتهیِ فرمها 🐘🛡️
در دنیایِ واقعی، فرمها خطرناکترین بخشِ اپلیکیشنِ شما هستند. هکرها از طریقِ فرمها سعی میکنند کدهایِ مخرب تزریق کنند یا دادههایِ شما را سرقت کنند.
۱. امنیت در برابر XSS (تزریق کد)
هرگز دادهیِ کاربر را بدونِ پاکسازی چاپ نکنید. تابعِ htmlspecialchars() کاراکترهایی مثل < و > را به کدهایِ بیخطر تبدیل میکند تا مرورگر آنها را به عنوانِ تگِ HTML اجرا نکند.
۲. تکنیکِ CSRF Protection
برایِ جلوگیری از این که یک مهاجم از طرفِ کاربرِ شما فرمی را ارسال کند، باید از یک Token امنیتیِ یکبار مصرف در هر فرم استفاده کنید. این توکن در سمتِ سرور چک میشود تا تایید شود فرم واقعاً از سایتِ خودتان ارسال شده است.
۳. استفاده از Filter Extension
PHP دارایِ یک افزونهیِ داخلیِ قدرتمند برایِ اعتبارسنجی است. به جایِ نوشتنِ رگکسهایِ پیچیده برایِ ایمیل، از filter_var($email, FILTER_VALIDATE_EMAIL) استفاده کنید که بسیار دقیقتر و ایمنتر است.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
تابعی به نام clean بسازید که یک ورودی بگیرد و هر دو عملِ trim و htmlspecialchars را روی آن انجام دهد و خروجی را return کند.
<?php
function clean($data) {
$data = trim($data);
$data = htmlspecialchars($data);
return $data;
}
?>
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.