فرم‌ها و اعتبارسنجی داده‌ها در PHP

دریافت ورودی‌های کاربر با متدهای GET و POST، ایمن‌سازی ورودی‌ها و اعتبارسنجی داده‌ها پیش از پردازش.

نمای کلی

فرم‌های HTML پل ارتباطی کاربران با برنامه‌های وب هستند. PHP با متغیرهای ابرعمومی (Superglobals) مانند $_GET و $_POST داده‌های ارسالی کاربر را دریافت می‌کند. پردازش صحیح و پاک‌سازی ورودی‌ها کلید امنیت وب‌سایت در برابر حملات XSS و SQL Injection است.

متدهای GET و POST

متد **GET** پارامترها را در آدرس بار (URL) نمایش می‌دهد و مناسب جستجو است، اما متد **POST** داده‌ها را درون بدنه درخواست HTTP ارسال کرده و برای اطلاعات حساس (مانند رمزعبور) و فرم‌های ثبت‌نام ضروری است.

form-demo.php
<?php

// Check if form was submitted via POST
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    // 1. Sanitize string input to prevent XSS
    $username = htmlspecialchars(trim($_POST['username'] ?? ''));
    
    // 2. Validate email using filter_var()
    $email = filter_var($_POST['email'] ?? '', FILTER_VALIDATE_EMAIL);

    if (!$email) {
        echo "Invalid email address!";
    } else {
        echo "Welcome, " . $username;
    }
}

?>

اعتبارسنجی (Validation) و پاک‌سازی (Sanitization)

پاک‌سازی (Sanitization): حذف کاراکترهای غیرمجاز یا خطرناک از ورودی‌ها (مثلاً تبدیل کدهای HTML به متن ساده با htmlspecialchars()).
اعتبارسنجی (Validation): بررسی اینکه داده با فرمت انتظاری مطابقت دارد یا خیر (مثلاً اطمینان از ایمیل بودن یک متغیر با filter_var()).

جدول مقایسه GET و POST

ویژگی GET POST
محل ارسال داده نمایش در URL بدنه درخواست (Request Body)
امنیت پایین (مناسب اطلاعات حساس نیست) بالاتر (داده‌ها مخفی در URL)
محدودیت حجم حدود ۲۰۰۰ کاراکتر بدون محدودیت واقعی (قابلیت تنظیم)

اشتباهات رایج در پردازش فرم‌ها

چاپ مستقیم ورودی‌های کاربر (آسیب‌پذیری XSS)

چاپ مستقیم $_POST['name'] بدون خروج امن (htmlspecialchars()) امکان تزریق اسکریپت‌های مخرب جاوااسکریپت به صفحه را فراهم می‌سازد.

عدم بررسی وجود کلید قبل از دسترسی

دسترسی مستقیم به کلیدهایی که ممکن است ارسال نشده باشند باعث بروز خطای Undefined key می‌شود. همواره از عملگر Null Coalescing (??) یا isset() استفاده کنید.

تمرین عملی

یک فرم تماس ساده HTML با فیلدهای ایمیل و پیام ایجاد کنید. اسکریپت PHP پردازش‌کننده باید بررسی کند که اگر درخواست از نوع POST بود، ایمیل را با filter_var() اعتبارسنجی کند و متن پیام را به روش امن پاک‌سازی نماید.

بازگشت به نقشه راه