آموزش جامع جلوگیری از حملات XSS در PHP بر اساس استانداردهای گوگل
حمله XSS چیست و چرا باید نگران آن باشیم؟
حمله Cross-Site Scripting (XSS) زمانی رخ میدهد که یک هکر اسکریپتهای مخرب خود را به درون صفحات وب معتبر تزریق کند. طبق مستندات امنیتی گوگل، آسیبپذیری XSS یکی از متداولترین تهدیدها برای برنامههای تحت وب است که میتواند منجر به سرقت کوکیها، توکنهای امنیتی و حتی جعل هویت کامل کاربران شود.
اصول سهگانه گوگل برای مقابله با XSS
گوگل برای مقابله با این حملات، یک رویکرد دفاع در عمق (Defense in Depth) را پیشنهاد میکند که شامل سه مرحله اصلی است:
- گریزدهی متناسب با متن (Context-Aware Escaping): خروجیها باید بر اساس جایی که قرار میگیرند (بدنه HTML، ویژگیهای تگ، کدهای جاوااسکریپت و...) فیلتر شوند.
- اعتبارسنجی ورودیها (Input Validation): پذیرش دادهها فقط در صورتی که ساختار مورد انتظار را داشته باشند.
- سیاست امنیت محتوا (Content Security Policy): یک لایه دفاعی اضافی برای محدود کردن منابع اجرای اسکریپتها.
۱. گریزدهی خروجیها در PHP (Output Escaping)
مهمترین قانون گوگل: هرگز به دادههای ورودی کاربر اعتماد نکنید، حتی اگر قبلاً ذخیره شده باشند. هنگام چاپ دادهها در صفحات HTML، باید از تابع htmlspecialchars با پرچمهای امنیتی استفاده کنید:
function safe_html($data) {
return htmlspecialchars($data, ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
// نمونه استفاده:
$user_input = "< script -->alert('hacked');< / script >";
echo safe_html($user_input);
// خروجی کاملاً امن به صورت متنی تبدیل میشود و اجرا نخواهد شد.
۲. فیلتر کردن و ضدعفونی کردن ورودیها (Sanitization)
قبل از پردازش یا ذخیره دادهها در پایگاه داده، باید فرمت آنها را بررسی کنید. استفاده از توابع فیلترینگ PHP کارایی بالایی دارد:
// ضدعفونی کردن ایمیل
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
// اعتبارسنجی نهایی
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
// داده امن است
} else {
// خطا در ورودی
}
۳. پیادهسازی هدر CSP (توصیه اکید گوگل)
گوگل به شدت استفاده از هدر Content Security Policy را توصیه میکند. این هدر به مرورگر اعلام میکند که فقط اسکریپتهای معتبر و تأییدشده را اجرا کند:
// تنظیم هدر CSP پیشنهادی گوگل برای جلوگیری از کدهای تزریق شده
header("Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedscripts.com;");
پرسش و پاسخ
نظری یافت نشد
برای ارسال نظر ابتدا وارد شوید