
- بواسطة x32x01 ||
ثغرة XSS - Cross-Site Scripting من أكتر الثغرات شيوعًا في عالم الويب، وبتحتل دايمًا مراكز متقدمة في تصنيفات الأمن المعلوماتي زي OWASP. خطورتها مش في إنها تضرب السيرفر نفسه، لكن في إنها تهاجم المستخدم من خلال المتصفح، وده اللي بيخليها مرعبة جدًا في بعض الحالات
.
في 2013، مثلًا، موقع Ubuntu Forums اتهاكر بسبب ثغرة XSS، واتسرقت بيانات أكتر من 2 مليون مستخدم، ونفس المشكلة حصلت مع Apple Developer Center!
وده دليل إن XSS ممكن تكون باب لهجمات ضخمة لو الهاكر استغلها صح.
إزاي بتشتغل ثغرة XSS؟
فكرة الثغرة ببساطة إن المهاجم بيقدر "يحقن" كود JavaScript خبيث جوه صفحة الويب. الكود ده بيتنفذ في متصفح الضحية، وكأنه جزء من الصفحة الأصلية.
يعني المتصفح بيتخدع وبيتعامل مع الكود كأنه آمن.
وده ممكن يحصل من خلال:
أضرار ثغرة XSS
لو اتنفذت الثغرة بنجاح، المهاجم ممكن يعمل حاجات خطيرة زي:
أنواع ثغرات XSS
مثلاً: الهاكر يكتب سكريبت في التعليقات أو الرسائل، ولما أي مستخدم يفتح الصفحة، الكود يتنفذ تلقائيًا.
مثال عملي (تعليمي):
لو السيرفر ما عملش "تنظيف" للمدخل ده، الكود هيتخزن في قاعدة البيانات ويتنفذ عند عرض التعليق.
المهاجم يبعت للضحية لينك فيه سكريبت جافاسكريبت، وأول ما يضغط عليه، الكود بيتنفذ.
مثال عملي (تعليمي):
لو السيرفر بيرجع نفس قيمة البحث بدون ترميز، الكود ده هيتنفذ في متصفح المستخدم فورًا.
الهاكر بيغير القيم داخل الصفحة من خلال جافاسكريبت، وبيتحكم في العناصر من غير ما السيرفر يلاحظ.
مثال عملي (تعليمي):
لو الرابط كان:
الكود ده هيتنفذ في المتصفح مباشرة
.
إزاي نحمي مواقعنا من ثغرات XSS؟
فيه طرق كتير فعالة، أهمها:
1. لا تثق في مدخلات المستخدم
أي إدخال من المستخدم لازم يتنظف (sanitize) ويتحقق منه.
مثال آمن بـ PHP:
مثال في الهيدر:
4. استخدم HttpOnly للكوكيز
الكوكيز اللي متعلم عليها بـ HttpOnly ما تقدرش جافاسكريبت توصلها.
مثال كود PHP:
حماية المستخدمين من XSS
حتى لو الموقع مؤمّن، المستخدم كمان عليه دور مهم:
الخلاصة
ثغرة XSS مش بسيطة زي ما ناس فاكرة.
هي مش بتكسر السيرفر، لكنها تقدر تكسر المستخدمين وتسرق بياناتهم بسهولة.
عشان كده، أي مطور ويب لازم:

في 2013، مثلًا، موقع Ubuntu Forums اتهاكر بسبب ثغرة XSS، واتسرقت بيانات أكتر من 2 مليون مستخدم، ونفس المشكلة حصلت مع Apple Developer Center!
وده دليل إن XSS ممكن تكون باب لهجمات ضخمة لو الهاكر استغلها صح.
إزاي بتشتغل ثغرة XSS؟
فكرة الثغرة ببساطة إن المهاجم بيقدر "يحقن" كود JavaScript خبيث جوه صفحة الويب. الكود ده بيتنفذ في متصفح الضحية، وكأنه جزء من الصفحة الأصلية.يعني المتصفح بيتخدع وبيتعامل مع الكود كأنه آمن.
وده ممكن يحصل من خلال:
- إدخال بيانات في نموذج (Form)
- رابط URL ملغوم
- تعليق أو رسالة في الموقع
أضرار ثغرة XSS
لو اتنفذت الثغرة بنجاح، المهاجم ممكن يعمل حاجات خطيرة زي:- سرقة حساب المستخدم عن طريق ملفات الـCookies
- تنفيذ أكواد خبيثة داخل المتصفح
- زرع برامج تجسس أو Trojan Horse
- خداع المستخدم بصفحات تسجيل دخول مزيفة
أنواع ثغرات XSS
1. Stored XSS (الثغرة المخزنة)
ده النوع الأخطر، لأن الكود الخبيث بيتخزن في قاعدة البيانات نفسها.مثلاً: الهاكر يكتب سكريبت في التعليقات أو الرسائل، ولما أي مستخدم يفتح الصفحة، الكود يتنفذ تلقائيًا.

HTML:
<!-- مثال توضيحي فقط -->
<input type="text" name="comment" value="<script>alert('XSS!')</script>">
2. Reflected XSS (الثغرة العاكسة)
هنا الكود بيتنفذ من خلال رابط URL ملغوم بدون تخزينه في قاعدة البيانات.المهاجم يبعت للضحية لينك فيه سكريبت جافاسكريبت، وأول ما يضغط عليه، الكود بيتنفذ.

HTML:
<!-- عنوان URL يحتوي كود XSS -->
http://example.com/search?q=<script>alert('Hacked!')</script>
3. DOM-Based XSS
ده نوع متقدم بيستغل DOM Tree في المتصفح نفسه.الهاكر بيغير القيم داخل الصفحة من خلال جافاسكريبت، وبيتحكم في العناصر من غير ما السيرفر يلاحظ.

HTML:
// كود غير آمن
document.getElementById("output").innerHTML = location.hash.substring(1);
لو الرابط كان:
HTML:
http://example.com/#<script>alert('DOM XSS')</script>

إزاي نحمي مواقعنا من ثغرات XSS؟
فيه طرق كتير فعالة، أهمها:1. لا تثق في مدخلات المستخدم
أي إدخال من المستخدم لازم يتنظف (sanitize) ويتحقق منه.
PHP:
<?php
// تنظيف النص من أكواد HTML
$userInput = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
echo "Welcome, $userInput!";
?>
2. استخدم خاصية Escaping أو Encoding
يعني ترميز أي مدخل قبل عرضه في الصفحة علشان المتصفح ماينفذوش ككود.3. فعّل Content Security Policy (CSP)
CSP بتمنع تنفيذ أي سكريبت مش موثوق.
Code:
Content-Security-Policy: default-src 'self'; script-src 'self'
4. استخدم HttpOnly للكوكيز
الكوكيز اللي متعلم عليها بـ HttpOnly ما تقدرش جافاسكريبت توصلها.
PHP:
setcookie("session_id", "abc123", [
"httponly" => true,
"secure" => true,
"samesite" => "Strict"
]);
حماية المستخدمين من XSS
حتى لو الموقع مؤمّن، المستخدم كمان عليه دور مهم:- استخدم متصفح محدث وفيه XSS Filter.
- ما تفتحش روابط مش موثوقة أو من رسائل غريبة.
- سجل خروجك بعد كل جلسة تصفح.
- استخدم إضافات حماية زي NoScript أو uBlock Origin.
الخلاصة
ثغرة XSS مش بسيطة زي ما ناس فاكرة.هي مش بتكسر السيرفر، لكنها تقدر تكسر المستخدمين وتسرق بياناتهم بسهولة.
عشان كده، أي مطور ويب لازم:
- ينظف المدخلات
- يستخدم ترميز HTML
- يفعّل CSP
- يختبر موقعه بأدوات زي Burp Suite أو OWASP ZAP
التعديل الأخير: