تعد البرمجة النصية عبر المواقع ، والمعروفة على نطاق واسع باسم XSS ، واحدة من أخطر طرق الهجوم التي يستخدمها مجرمو الإنترنت ، لذلك من الضروري أن يعرف كل مطور وباحث أمني ما هو وكيف يفعل منع الهجمات. إذن ، كيف يمكنك اتخاذ إجراء ضد ثغرة XSS؟ تستخدم HTML أو JavaScript أو DOM لإظهار البيانات التي يتلقاها موقع الويب من المستخدم. يمكن أن يعمل واحد أو أكثر من هذه المجالات الثلاثة المختلفة معًا.
كيفية منع استخدام XSS لـ HTML
يسمح XSS للمهاجمين بحقن أكواد ضارة أو نصوص برمجية في صفحات الويب ، تستهدف المستخدمين المطمئنين الذين يزورون الموقع. قد يؤدي ذلك إلى سرقة البيانات الشخصية ، أو إعادة توجيه الزوار إلى موقع آخر أنشأه المجرم الإلكتروني ، أو التلاعب بطريقة أخرى بمظهر صفحة الويب. لكن يمكنك منع حدوث ذلك ؛ على سبيل المثال ، عن طريق منعهم من إدخال HTML.
تخيل أن لديك موقعًا إلكترونيًا به سجل زوار. لنفترض أن الزائرين الذين يستخدمون دفتر الزوار هذا يمكنهم كتابة أسمائهم ورسائلهم هنا ، ويمكن عرض رسائلهم بشكل عام. المهاجم الذي يريد إجراء اختبار XSS في سجل الزوار الخاص بك سيستخدم المنطقة التي خصصتها لكتابة رسالة. سيقوم مجرم الإنترنت هذا بتشغيل كود JavaScript هنا. على سبيل المثال ، يمكن للمهاجم استخدام كود JavaScript مثل:
<النصي>يُحذًِر("XSS!")</script>
يجب أن يستخدم المهاجم علامة البرنامج النصي حتى ينجح ذلك. إذا لم يفعلوا ذلك ، فلن تعمل شفرة JavaScript. يجب ترميز العبارة
كيفية منع استخدام XSS لجافا سكريبت
المنطق في HTML هو أيضا صالح في JavaScript. في بعض التطبيقات ، من الممكن طباعة البيانات التي يتلقاها الموقع من المستخدم برمز JavaScript.
ضع في اعتبارك هذا الترميز:
<ع معرف ="مطبعة"></ ص>
<النصي>
document.getElementById ("امتحان") .innerHTML = "";
</script>
تخيل أن موقعًا إلكترونيًا يستخدم كتلة تعليمات برمجية مثل الموجودة أعلاه. استخدم المطور هنا علامة "p" تسمى "print". كما ترى من الكود ، ستأتي القيمة من معلمة "search" ، ويريد المطور إظهار هذه القيمة الواردة في علامة "p". أراد المطور الذي أجرى هذه العملية استخدام ميزة HTML الداخلية لجافا سكريبت.
الآن دعونا نلقي نظرة على الموقف من وجهة نظر المهاجم الإلكتروني. في مثل هذه الحالة ، سيقوم المهاجم بإجراء اختبار XSS ضمن علامة "البرنامج النصي". لهذا ، لا يحتاج المهاجم إلى إعادة تشغيل العلامة ، لأن علامة "البرنامج النصي" قيد الاستخدام بالفعل. يمكن للمهاجم بعد ذلك كتابة اختبار مثل هذا:
filename.php؟ بحث = أ" يُحذًِر("XSS!"); و = "
سيظهر هذا الرمز على الموقع على النحو التالي:
document.getElementById ("امتحان") .innerHTML = " أ" يُحذًِر("XSS!"); و ="";
سيكون هذا الهجوم ناجحًا. لفهم المشكلة بشكل أفضل ، دعنا نفحص أحد الأمثلة الأخرى على أسلوب يمكن للمهاجم استخدامه. ربما قام المخترق بتطبيق اختبار XSS مثل:
filename.php؟ بحث =";</script><م>فاتح</em>
هذا ما سيبدو عليه عند المشاهدة من موقع الويب:
document.getElementById ("امتحان") .innerHTML = "";</script><م>فاتح</em>";
قد يبدو هذا غريبًا بعض الشيء لأن المهاجم قد أغلق علامة "script" الأولى باستخدام بنية مثل "/ script" هنا. وهكذا ، يمكن للمهاجم إعادة تشغيل أي كود JavaScript و HTML يريده.
إذا كنت تفكر في هذين المثالين المختلفين ، فإن الحماية من XSS تبدو بسيطة جدًا. سيكون الاحتياط الضروري هو تشفير ملف " و ' الشخصيات التي تراها في المثال الأول. في المثال الثاني ، قم بترميز الأحرف < و >.
كيفية منع XSS من استخدام DOM
في هذا البديل من XSS ، يمكن أن تتداخل البيانات التي يتلقاها موقع الويب من المستخدم مع خاصية عنصر DOM. على سبيل المثال ، يمكن أن تؤثر معلومات اللون التي يتلقاها الموقع من المستخدم على لون خلفية الجدول أو الخلفية الكاملة للصفحة. لذلك يتدخل المستخدم عن غير قصد في تخطيطات نمط الجسم والجدول. الكود التالي هو مثال جيد على ذلك:
<الجسم bgcolor ="<؟ php echo $ _GET ['لون']; ?>"/>
باستخدام هذا ، يستخدم موقع الويب معلمة "color" المستلمة من المستخدم مباشرةً في خاصية "bgcolor" لعنصر "body". إذن ما الذي يمكن أن يفعله المهاجم في هذه المرحلة؟ يمكنهم تنفيذ هذا الكود الضار:
filename.php؟ اللون = أحمر" تفريغ ="يُحذًِر('XSS!')
هذا يبدو هكذا عند مشاهدته من موقع الويب:
<الجسم bgcolor =" أحمر" تفريغ ="يُحذًِر('XSS!') "/>
لمنع حدوث ذلك ، سيتعين على المطور تشفير ملف " شخصية.
ومع ذلك ، هناك عنصر واحد أكثر أهمية في JavaScript يجب ملاحظته. يُعد مقتطف الشفرة التالي مثالاً على ذلك:
<أ href ="جافا سكريبت: تنبيه ('XSS!')">
هذا يعني أنه من الممكن تشغيل بعض تعليمات JavaScript البرمجية مباشرة. أحد أفضل التدابير الوقائية هو التأكد من أن موقع الويب يتحقق مما إذا كانت البيانات التي يتلقاها من المستخدمين هي عنوان URL حقيقي. أبسط طريقة هي التأكد من وجود تعبيرات مثل "HTTP" و "HTTPS" (الإصدار الآمن من HTTP) في الاتصال.
مثال على وظيفة لمنع XSS باستخدام PHP
لقد رأيت بعض الأمثلة على كيفية حماية تطبيق أو موقع ويب من هجمات XSS. يمكنك استخدام مقتطفات التعليمات البرمجية في هذا الجدول مع PHP:
تشفير في HTML |
htmlspecialchars ($ str، ENT_COMPAT) |
التشفير في JavaScript وسمة DOM |
htmlspecialchars ($ str، ENT_NOQUOTES) |
فحص URL |
'/ ^ (((https؟)|(\/\/)).*/'؛ |
لاحظ أن هذه مجرد أمثلة وستختلف بناءً على لغة البرنامج التي تستخدمها.
أنت تستطيع إنشاء تطبيق ويب باستخدام PHP وجرب الرموز التي تراها أعلاه لإرسالها. إذا كنت تتساءل عن كيفية استخدام كل هذه الطرق ، فيمكنك الحصول على بعض الأفكار من مجموعة تعليمات PHP البرمجية أدناه ، والتي من المفترض أن تكون مفيدة حتى إذا كنت تستخدم لغة مختلفة:
<؟بي أتش بي
$ data = $ _GET ['data']؛وظيفةالسمة($ str){
يعود htmlspecialchars ($ str، ENT_COMPAT)؛
// ENT_COMPAT سوف يقوم بترميز حرف الاقتباس المزدوج (").
}
وظيفةin_html($ str){
رابط $ = '/^(((https?)|(\/\/))).*/';
لو(! preg_match ($ link، $ str))
{
يعود "/";
}
يعود $ str؛
}
$ data = in_attribute ($ data) ؛
بيانات $ = in_html (بيانات $) ؛
$ data = real_url (بيانات) ؛
?>
حماية موقع الويب الخاص بك من XSS والمزيد
XSS هو ناقل هجوم شائع يستخدمه المتسللون. عادةً ، يمكن استخدام قيمة المسار في عنوان URL ، أي حقل على موقع الويب الخاص بك حيث يمكن إدخال البيانات (مثل حقول النماذج والتعليقات) ، لاختبار ثغرة XSS. لكن بالطبع ، هناك العديد من الطرق المختلفة التي يمكن لمجرمي الإنترنت استخدامها لمهاجمة أحد المواقع ، خاصةً إذا كان لديك موقع ويب به العديد من المستخدمين ويخفي معلوماتهم.