SQL Injection

راه‌حل: همیشه از prepared statements استفاده کنید:

$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => $email]);

XSS (Cross-Site Scripting)

هر خروجی که از ورودی کاربر آمده را escape کنید:

echo htmlspecialchars($input, ENT_QUOTES, 'UTF-8');

CSRF

برای هر فرم یک توکن یکتا تولید و اعتبارسنجی کنید:

$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

و در فرم:

<input type="hidden" name="csrf" value="<?= $_SESSION['csrf_token'] ?>">

سایر نکات مهم

  • پسوردها را فقط با password_hash() ذخیره کنید.
  • هدرهای امنیتی مثل X-Content-Type-Options: nosniff را فعال کنید.
  • با session_regenerate_id(true) از Session Fixation جلوگیری کنید.
  • آپلود فایل را به اکستنشن‌های مجاز محدود و نام فایل را تصادفی کنید.