حمله XSS یا Cross-Site Scripting یکی از پرکاربردترین حملات وب هست. با کمی مواظبت میتونید سایت رو در برابرش امن کنید. تو این مقاله راه‌های حرفه‌ای رو یاد میگیرید.

XSS چیه؟

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

انواع XSS

Reflected XSS

کد در URL یا Form. مثال:
example.com/search?q=<script>alert(1)</script>

اگه سایت q رو در صفحه نمایش بده، اسکریپت اجرا میشه.

Stored XSS

کد در دیتابیس ذخیره میشه. مثلاً در comment. هر کس صفحه رو ببینه، اسکریپت اجرا میشه.

DOM XSS

در JavaScript کلاینت. document.write با ورودی کاربر.

راه‌های جلوگیری

۱. Escape Output

هر جا ورودی کاربر رو نمایش میدید، Escape کنید:
PHP: htmlspecialchars($input)
Laravel: {{ $input }} (خودکار)
JavaScript: textContent (نه innerHTML)

۲. Content Security Policy

CSP جلوی اسکریپت‌های نامعتبر رو میگیره.

۳. HttpOnly Cookie

JavaScript نمیتونه Cookie رو بخونه.

۴. Validate Input

ورودی رو قبل ذخیره validate کنید. طول، نوع، فرمت.

۵. Sanitize HTML

اگه واقعاً HTML لازمه (مثل comment)، از کتابخانه‌های sanitizer استفاده کنید:
PHP: HTML Purifier
JavaScript: DOMPurify

Context Matters

escape بر اساس context متفاوته:
HTML Body: htmlspecialchars
Attribute: htmlspecialchars با ENT_QUOTES
JavaScript: JSON encoding
URL: urlencode
CSS: مطمئن‌ترین اجتناب

Framework Protection

فریمورک‌های مدرن پیش‌فرض Escape میکنن:
- Laravel: {{ }} خودکار
- Django: templates خودکار
- React: JSX پیش‌فرض
- Vue.js: پیش‌فرض

Legacy Frameworks

WordPress، جوملا: پلاگین‌های Security. مدام آپدیت.

Trusted Types (Chrome)

API جدید Chrome که XSS رو تقریباً غیرممکن میکنه.

Testing

Manual: تست با <script>alert(1)</script>
Burp Suite: ابزار حرفه‌ای
OWASP ZAP: رایگان
XSStrike: پیشرفته

WAF

Web Application Firewall مثل Cloudflare WAF، ModSecurity. لایه اضافی.

Encoding Chart

< = &lt;
> = &gt;
" = &quot;
' = &#x27;
& = &amp;

WordPress و XSS

حمله رایج در comment، custom fields. Wordfence و امثالهم کمک میکنن.

File Upload XSS

اگه کاربر HTML یا SVG آپلود کنه، امکان XSS. Validate و در دامنه جدا نمایش بدید.

Best Practices

Escape by default: همیشه
Whitelist not Blacklist: چیزهای مجاز رو تعریف کنید
CSP: حتی اگه Escape فراموش کردید، CSP جلوش رو میگیره
Update Framework: آسیب‌پذیری‌ها رفع میشن

OWASP XSS Cheat Sheet

owasp.org/www-community/attacks/xss/ منبع کامل.

سباهاست

سرورهای سباهاست با ModSecurity و WAF لایه اضافی دارن.

جمع‌بندی

XSS یه ریسک جدی ولی قابل جلوگیری. با Escape درست، CSP و Framework مدرن، سایت رو در برابرش امن کنید.