يوجد العديد من الطرق والنصائح التي تحمي من اختراقات XSS وتطبيقها يعتمد على المشروع بحد ذاته والتقنيات المستخدمة فيه من حيث التعامل مع إدخال البيانات من المستخدم، أنواع قواعد البيانات المستخدمة والوسائط middlewares والمكتبات الإضافية التي يتم استخدامها من طرف الخادم والمستخدم معاً، لكل مشروع ثغرات معيّنة ولا يمكن تعميم الثغرات نفسها على كافة المشاريع، ولكن عموماً يوجد بعض النصائح التي عادةً ما يتم الاستعانة فيها في معظم الحالات ولكن بداية يجب عليك تحديد أنواع XSS المتاحة ثم معالجة الثغرات التي قد تنجم عن كل نوع على حدى:
1- Reflected cross-site scripting: (XSS منعكس) هو هجوم يحدث عند إعادة توجيه برنامج نصي ضار إلى تطبيق عبر HTTP. في XSS غير الدائم ، يتم تنفيذ الشفرة الضارة على الفور في متصفح الضحية. وإذا فشل الخادم في تشفير مدخلات المستخدم، قد يبحث المهاجم عن هذه السلسلة <script> alert ('XSS!') </script>. وبالتالي تنعكس شفرة JavaScript هذه على المتصفح كجزء من الكود. ثم يتم تنفيذ الكود لعرض تنبيه يؤكد ثغرة XSS.
2- Stored cross-site scripting: يحدث عندما يتم حفظ نص برمجي ضار في قاعدة بيانات موقع الويب. يتم تنفيذ البرنامج النصي الضار عند وصول المستخدم إلى تطبيق الويب. في أي لحظة تفتح الضحية المتصفح ، يتم تشغيل البرنامج النصي الضار. وبالتالي من الممكن أن يصل إلى كافة مستخدمي الموقع أو تطبيق الويب.
3- DOM-based cross-site scripting: ينشأ عندما يتم تنفيذ برنامج نصي ضار بسبب تعديلات الشجرة DOM في متصفح المستخدم. (وهو عادةً مايتم إهماله من قبل مطوري واجهات المستخدم)
وللحماية من XSS يجب عليك الاطلاع على كل نوع على حدى ومحاولة اكتشاف الطرق التي يتم فيها الاختراق ضمن هذا النوع لتستطيع حماية مشروعك من هذه الهجمات حسب التقنيات المتاحة لديك والتي تم شرحها مسبقاً.
بعض النصائح العامة:
- استخدام Output encoding ضمن خادم Node.js والذي مهمته أن يقوم بتشفير النصوص الغير محمية والتي مشتبه فيها (من الممكن أن تحوي إشارات غير نصية , . > < إلخ) قبل إرسالها إلى طرف المستخدم.
- تجنب استقبال البيانات وإدخالها مباشرةً إلى قواعد البيانات كما هي، يجب تطبيق آليات معينة للحماية وتطهير البيانات قبل وصولها إلى الشيفرة البرمجية المسؤولة عن معالجتها وإدخالها إلى قاعدة البيانات (من خلال عمليتين: sanitization و input validation).
- في حال كان يتم استخدام أحد محركي القوالب templating engine للتحكم بواجهات المستخدم، يجب عليك تجنّب حقن الشيفرات مباشرةً من خادم node.js إلى صفحات القالب، بل استخدام نمط مفصّل للتعامل مع البيانات والتحقق منها قبل تمريرها من الخادم إلى صفحات الويب وبالعكس.
- في حال كان مشروع يستخدم ملفات تعريف الارتباط Cookies أو الجلسات Sessions، يجب عليك تطبيق الحماية اللازمة لتشفير البيانات والتحقق من مصدرها وطرق التعرّف على تعديل البيانات المحفوظة فيها وإضافة آلية معيّنة لمنع سرقة محتوياتها من خلال مفاتيح التشفير وآليات التوثيق المتعددة 2FA وغيرها. فسرقة ملفات تعريف الارتباط هي من أهم الأسباب التي تؤدي إلى هجمات XSS وتأكد من إضافة الخصائص التالية لها:
httpOnly: true, secure: true
باستخدامك لـ httpOnly يتم منع إضافة شيفرات برمجة خبيئة لأجزاء الجافاسكريبت في المتصفح من خلال إخطار المتصفح بعدم نشر محتوى ملفات تعريف الارتباط إلى الشيفرات البرمجية.
طبعاً يمكنك البحث والتعرف على المزيد من طرق الحماية من XSS تبعاً لمشروعك وتفاصيله وآلية عمله، وبشكل عام ستجد بعض المكتبات التي يمكنك استخدامها مع مشروعك والتي تحوي ضمنياً آليات معيّنة للحماية من هذه الهجمات مثل مكتبة Helmet والتي ينصح فيها من قبل مطوري إطار العمل Express.
التعليقات