دفاع در برابر XSS بر اساس زمینه خروجی انجام میشود. متنی که داخل HTML نمایش داده میشود با دادهای که داخل ویژگی HTML، URL یا JavaScript قرار میگیرد یکسان نیست.
const message = new URLSearchParams(location.search).get('q');
// Avoid: container.innerHTML = message;
container.textContent = message ?? '';
Escape در قالب، خودداری از HTML خام، اعتبارسنجی نشانیها و سیاست Content Security Policy از لایههای دفاعیاند. CSP جایگزین اصلاح محل آسیبپذیر نیست.
اصطلاحات مرتبط: اسکریپتنویسی بینسایتی، سیاسپی، جعل درخواست بینسایتی.
Escape خروجی در قالب
// Laravel Blade
<p>{{ $user->name }}</p>
// Avoid rendering untrusted HTML with {!! !!}
محافظت در برابر XSS به محل قرارگیری داده وابسته است. Escape متن HTML با Escape در JavaScript، URL یا Attribute یکسان نیست. Content Security Policy لایه دفاعی کمکی است.