حمله 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
< = <
> = >
" = "
' = '
& = &
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 مدرن، سایت رو در برابرش امن کنید.