چگونه از حملات XSS (Cross-Site Scripting) جلوگیری کنیم؟

چگونه از حملات XSS (Cross-Site Scripting) جلوگیری کنیم؟

حملات XSS (Cross-Site Scripting) یکی از متداول‌ترین تهدیدات امنیتی در سایت‌ها و اپلیکیشن‌های وب هستند که می‌توانند باعث سرقت اطلاعات کاربران، تغییر محتوای صفحه و اجرای کدهای مخرب شوند. در این مقاله، روش‌های مؤثر برای جلوگیری از این حملات را بررسی می‌کنیم.


XSS چیست؟

چگونه از حملات XSS (Cross-Site Scripting) جلوگیری کنیم؟

حمله XSS زمانی رخ می‌دهد که یک هکر بتواند کد مخرب جاوااسکریپت (JavaScript) را در یک صفحه وب تزریق کند و این کد روی مرورگر قربانی اجرا شود. این حمله معمولاً از طریق فرم‌های ورودی، URL و کوکی‌ها انجام می‌شود.

مثال ساده از حمله XSS:

اگر یک وب‌سایت پیام‌های کاربران را بدون فیلترکردن ذخیره کند، یک مهاجم می‌تواند چنین کدی را در ورودی ارسال کند:

html
<script>alert('Your site is hacked!');</script>

در صورت عدم استفاده از فیلترهای امنیتی، این کد روی مرورگر دیگر کاربران اجرا می‌شود و می‌تواند برای سرقت کوکی‌ها، تغییر محتوا و اجرای بدافزارها مورد استفاده قرار گیرد.


روش‌های جلوگیری از حملات XSS

1. استفاده از Escape کردن ورودی‌های کاربر

هر داده‌ای که از کاربر دریافت می‌شود باید قبل از نمایش، فرمت‌بندی و Escape شود تا امکان اجرای جاوااسکریپت را از بین ببریم.

مثال در PHP:

php
echo htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');

این کد تمامی کاراکترهای < > ” ‘ را به معادل امن HTML تبدیل می‌کند و از اجرای جاوااسکریپت جلوگیری می‌کند.


2. استفاده از Content Security Policy (CSP) 🔐

CSP یک هدر امنیتی است که می‌تواند لود شدن کدهای مخرب از منابع غیرمجاز را مسدود کند.

مثال تنظیم CSP در هدر HTTP:

php
header("Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com");

این سیاست اجازه می‌دهد فقط اسکریپت‌هایی که از دامنه خود سایت و trusted-cdn.com لود می‌شوند اجرا شوند.


3. اعتبارسنجی و پاکسازی ورودی‌های کاربر 🛡️

ورودی‌هایی که از کاربران دریافت می‌شود باید بررسی و فیلتر شوند تا از ورود کدهای مخرب جلوگیری شود.

مثال در PHP (با استفاده از فیلترهای داخلی):

php
$name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_STRING);

در اینجا ورودی‌ها به‌صورت خودکار از کدهای خطرناک خالی می‌شوند.


4. استفاده از HttpOnly و Secure برای کوکی‌ها 🍪

فعال کردن این تنظیمات در کوکی‌ها باعث می‌شود که جاوااسکریپت نتواند به آن‌ها دسترسی داشته باشد و از حملات XSS مبتنی بر سرقت کوکی جلوگیری شود.

مثال در PHP:

php
setcookie("session", $session_id, [
'httponly' => true,
'secure' => true,
'samesite' => 'Strict'
]);

این تنظیمات باعث می‌شود کوکی فقط در ارتباطات امن (HTTPS) و بدون دسترسی جاوااسکریپت استفاده شود.


5. استفاده از فریمورک‌های ایمن 🏗️

فریمورک‌های مدرن مانند React، Angular و Vue.js به‌صورت داخلی از حملات XSS جلوگیری می‌کنند، زیرا به جای ادغام مستقیم HTML و جاوااسکریپت، از متدهای امن استفاده می‌کنند.

مثال در React (به‌صورت خودکار XSS را مسدود می‌کند):

jsx
const name = "<script>alert('Hacked!');</script>";
return <div>{name}</div>;

در React، مقدار name به‌عنوان یک رشته ساده نمایش داده می‌شود و کد جاوااسکریپت اجرا نمی‌شود.


6. جلوگیری از استفاده از eval() و innerHTML در جاوااسکریپت 🚫

تابع eval() و innerHTML می‌توانند امکان اجرای کدهای مخرب XSS را فراهم کنند، بنابراین بهتر است از جایگزین‌های امن استفاده کنید.

نمونه ناامن:

javascript
document.write("<script>alert('Hacked!');</script>");

نمونه امن:

javascript
const div = document.createElement("div");
div.textContent = "<script>alert('Hacked!');</script>";
document.body.appendChild(div);

در این روش، textContent به جای HTML خام استفاده شده که از اجرای اسکریپت جلوگیری می‌کند.


7. محدود کردن ورودی‌های فرم (Whitelist Approach)

بهتر است برای هر ورودی یک لیست از مقادیر مجاز (Whitelist) تعریف شود و از دریافت مقادیر نامعتبر جلوگیری کنیم.

مثال در PHP:

php
$allowed_roles = ['admin', 'editor', 'user'];
if (!in_array($_POST['role'], $allowed_roles)) {
die("Invalid role!");
}

این روش تضمین می‌کند که فقط مقادیر مشخص‌شده مجاز هستند و از ورود داده‌های مخرب جلوگیری می‌شود.


8. استفاده از ابزارهای امنیتی مانند OWASP ZAP و Burp Suite 🛠️

ابزارهای OWASP ZAP و Burp Suite می‌توانند سایت شما را اسکن کرده و آسیب‌پذیری‌های XSS را شناسایی کنند.

نمونه اسکن با OWASP ZAP:

bash
zap.sh -quickurl "https://example.com"

این ابزار کلیه نقاط آسیب‌پذیر سایت را بررسی و پیشنهادهای امنیتی ارائه می‌دهد.


نتیجه‌گیری 🚀

حملات XSS یک تهدید جدی برای امنیت کاربران و وب‌سایت‌ها هستند. با استفاده از Escape کردن ورودی‌ها، تنظیم CSP، محدود کردن کوکی‌ها، حذف استفاده از eval()، استفاده از فریمورک‌های امن و ابزارهای امنیتی می‌توان از این حملات جلوگیری کرد.

دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *