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 جلوگیری کنید. - آپلود فایل را به اکستنشنهای مجاز محدود و نام فایل را تصادفی کنید.