English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في الآونة الأخيرة، تم الإعلان عن الأخبار، حيث استخدم أربعة موظفين في قسم الأمان السيبراني في ألي بيانات ثغرة في صفحة الويب لكتابة سكربت JavaScript لسرقة الهيئات، وبالتالي، بعد أن تحفزوا، أرادوا معرفة كيفية كتابة هذا سكربت JavaScript بالضبط، وكيف يتم تحقيق جميع أنواع السحب والاستنساخ.
ما هو هجوم تعبئة JavaScript؟
1. في كل مرة يتم فيها استقبال محتوى إدخال المستخدم وإعادة عرض هذه المحتويات، يصبح الموقع سهلاً للاحتراز من هجمات تعبئة JavaScript. دعونا ندرس تطبيقًا معرضًا للهجمات بسهولة تعبئة JavaScript. لنفترض أن تم إنشاء موقع ملاحظات العملاء. يمكن للعملاء زيارة الموقع وإدخال ملاحظات حول المنتج. عند تقديم الملاحظات، يتم عرض معلومات الملاحظات مرة أخرى على صفحة الملاحظات.
موقع ملاحظات العملاء هو موقع بسيط. للأسف، هذا الموقع معرض للهجمات باستخدام إدراج JavaScript.
لنفترض أنك تقوم بإدخال النص التالي في نموذج ملاحظات العملاء:
<script>alert(“Attack!”)</script>
هذا النص يمثل سكربت JavaScript لعرض نافذة رسالة التحذير. عند تقديم هذا السكربت في نموذج ملاحظات العملاء، سيتم عرض رسالة Attack! في المستقبل عند زيارة أي شخص لموقع ملاحظات العملاء.
2. هناك أيضًا إدخال سطر من رمز js في شريط العناوين في المتصفح، لتغيير محتوى المتغيرات الجافا سكربت أو عناصر الصفحة.
باستخدام إدراج Javascript، لا يحتاج المستخدم إلى إغلاق أو حفظ الصفحة ليتغير محتواها، ويتم ذلك في شريط العناوين في المتصفح. لغة الأمر مثل:
javascript:alert(#command#)
على سبيل المثال، إذا كنت ترغب في رؤية نافذة تحذير alert على موقع http://www.example.com، فإنك يجب أولاً إدخال URL في شريط العناوين وانتظر حتى يتم تحميل الصفحة، ثم حذف URL وإدخال:
javascript:alert("Hello World")
بصفتها URL جديدة. هذا سينتج عنه نافذة تحذير "Hello World"، يمكن استخدام هذه التقنية لتغيير أي محتوى في صفحة الويب، مثل صورة. لنفترض أن لدينا صورة شعار موقع، نجد جزءًا من رمز HTML في ملف المصدر للصفحة:
<IMG Name="hi" SRC="hello.gif">
تم تسمية الصورة بـ "hi"، ملف المصدر هو "hello.gif"، نريد تغييرها إلى ملف "bye.jpeg" الموجود على موقعنا (http://www.mysite.com)، لذا عنوان الصورة الكامل هو http://www.mysite.com/bye.jpeg، باستخدام إدراج Javascript، يجب علينا فقط إدخال:
javascript:alert(document.hi.src="http://www.mysite.com/bye.jpeg")
سوف ترى إشعار التحذير "http://www.mysite.com/bye.jpeg" يظهر، ثم يتم تغيير الصورة. يجب ملاحظة أن هذه التغييرات مؤقتة فقط! إذا قمت بتحديث الصفحة أو الدخول مرة أخرى، ستختفي التغييرات الخاصة بك لأنك قمت بتلك التغييرات فقط على جهاز الكمبيوتر الخاص بك وليس على خادم الويب.
يمكننا استخدام نفس الطريقة لرؤية أو تغيير قيمة المتغير، على سبيل المثال، يمكننا العثور على كود مثل هذا في صفحة الويب:
<SCRIPT LANGUAGE="JavaScript"> var a="test" </SCRIPT>
يعني أن قيمة المتغير a هي "test"، الآن نكتب:
javascript:alert(a)
ثم نغير قيمته إلى "hello":
javascript:alert(a="hello")
استخدام جافا سكربت يمكن استخدامه لتغيير خصائص النموذج، لنفترض أن لدينا كود مثل هذا:
<form name="format" action="send.php" method="post"> <input type="hidden" name="mail" value="[email protected]"> <input type="text" name="name"> <input type="submit" value="submit"></form>
نريد أن نرسل نموذج إلى بريدنا الإلكتروني وليس [email protected]. يمكن استخدام الأمر التالي:
javascript:alert(document.format.mail.value="[email protected]")
• ربما لاحظت ميزة الهرمية في هذه الأوامر:
• نحن نوضح من اليسار إلى اليمين بالترتيب:
• 1) الأيسر هو document
• 2) ثم هو اسم العنصر الذي نريد تغييره (مثل document.hi.src) أو العنصر المضمن (مثل document.format.mail.value)
• 3) الأخير هو السمة التي نريد تغييرها (مثل مسار المصدر: document.hi.src، أو قيمة المتغير: document.format.mail.value)
• 4) نستخدم "." لتقسيم
• 5) عندما نريد تغيير قيمة السمة، نستخدم "=" وقيمة السمة الجديدة
• * ملاحظة: عندما يكون قيمة السمة جديدة نصية (مثل: document.format.mail.value="[email protected]") يجب أن تكون محاطة بأقواس مزدوجة.
• إذا أردنا أن نستخدمها كقيمة متغير، فإنه لا يجب استخدام الأسهم المزدوجة "". على سبيل المثال، إذا أردنا أن نعطي قيمة المتغير b لـ a، يمكننا إدخال javascript:alert(a=b).
• ولكن، معظم العلامات في الصفحة ليس لها أسماء، مثل:
<form action="send.php" method="post"> <input type="hidden" name="mail" value="[email protected]"> <input type="text" name="name"> <input type="submit" value="submit"></form>
في هذا الكود لا يوجد اسم نموذج، وبتلخيص هذه المعلومات، يمكنك استخدام هذا الأمر:
javascript:alert(document. .mail.value="[email protected]")
في هذه الحالة يجب علينا إحصاء العنوان التسلسلي للنموذج وإيجادها، وإليك مثال:
<form action="send.php" method="post"> <input type="text" name="name"> <input type="submit" value="submit"> </form> <form action="send.php" method="post"> <input type="hidden" name="mail" value="[email protected]"> <input type="text" name="name"> <input type="submit" value="submit"> </form> <form action="send.php" method="post"> <input type="text" name="name"> <input type="submit" value="submit"> </form>
• في الكود المذكور أعلاه نرى 3 نماذج، لكننا مهتمون فقط بالنموذج الثاني، لذا هو الرقم الذي نريده هو 2. لا تنسى أننا نبدأ من الرقم 1، مثل 1،2،3،4... ولكن JavaScript يبدأ من 0، مثل 0،1،2،3... لذا هو الرقم الفعلي للنموذج هو 1 وليس 2، عادةً نحتاج إلى طرح الرقم الذي نجد من النموذج.
javascript:alert(document.forms[1].mail.value="[email protected]")
• بهذه الطريقة يمكنك تعديل الصور أو الروابط بدون اسم، يمكنك تغيير 'forms' إلى أي نوع علامة ترقيم تريده. بالنسبة للصور
javascript:alert(document.images[3].src="#the url of the picture you want#")
بالنسبة للروابط
javascript:alert(document.links[0].href="#the url you want#")
آخيرًا، يمكننا استخدام هذه الخدعة لتحرير ملفات 'cookies'. الأمر التالي مكتوب من قبل Dr_aMado من triviasecurity.net وقد قمت ببعض التعديلات عليه ليعرضه قبل تعديل المستخدم. ما تحتاج إلى القيام به هو نسخه إلى شريط العناوين فقط:
javascript:alert(window.c=function a(n,v,nv){c=document.cookie;c=c.substring(c.indexOf(n)+n.length,c.length); c=c.substring(1,( (c.indexOf(";")>-1) ? c.indexOf(";") : c.length));nc=unescape(c).replace(v,nv); document.cookie=n+"="+escape(nc);return unescape(document.cookie);}); alert('The cookie is: "'+document.cookie+'"');alert(c(prompt("The name of the cookie:",""),}} prompt("Change this value:",""),prompt("with this:","")))
// إذا كنت ترغب في تعديل ملف الـ cookies يدويًا، يمكنك استخدام الأمر التالي:
javascript:alert(document.cookie)
سيظهر هذا ملف الـ cookies الحالي، افترضًا "userid=1"، إذا كنت ترغب في تغييره إلى "userid=2"، يمكنك استخدام الأمر التالي:
javascript:alert(document.cookie="userid=2")
أخيرًا، يجب أن أؤكد أن جميع التغييرات هي فقط على المستوى العميل! كما لو أنك قمت بحفظ صفحة الويب على جهاز الكمبيوتر الخاص بك ثم تعديلها. ومع ذلك، باستخدام هذه التقنية، يمكنك خداع الصفحة (مثل ملفات الـ cookies) أو تجاوز التحقق الأمني. على سبيل المثال، قد تقوم بعض الصفحات بفحص موقع إرسال البيانات، إذا كنت ترسل بيانات من http://www.test.com/form.php إلى http://www.test.com/check.php، قد يقوم check.php بفحص ما إذا كانت البيانات تأتي من نموذج http: //www.test.com/form.php. بالإضافة إلى ذلك، إذا كنت تخطط لإدخال سكربت JavaScript الخاص بك في الصفحة، يمكنك تغيير الصور وتحافظ عليها!
في النهاية، بما أن حقن JavaScript يمكن أن يكون مخيفًا، ما هي الحلول التي يمكننا تطبيقها على مواقعنا الخاصة لتجنب حقن JavaScript؟
الطريقة الأولى:
من الطرق البسيطة لمنع هجوم حقن JavaScript هي إعادة عرض البيانات في النمط باستخدام رمز HTML أي بيانات إدخال مستخدم أي موقع.
مثلًا: <%=Html.Encode(feedback.Message)%>
ما هو معنى استخدام رمز HTML لت编码 نص؟ عند استخدام رمز HTML لت编码 النص، يتم استبدال الحروف الخطيرة مثل < و > بمثيلات HTML مثل < و >، لذا، عند استخدام رمز HTML لت编码 النص <script>alert("Boo!")</script>، سيتم تحويله إلى <script>alert("Attack!")</script>، وسيوقف المتصفح تنفيذ سكربتات JavaScript عند تحليل النص الم编码، بل سيظهر صفحة غير ضارة.
الطريقة الثانية:
بالإضافة إلى استخدام بيانات التشفير بلغة HTML لعرض البيانات في الواجهة، يمكنك أيضًا استخدام بيانات التشفير بلغة HTML قبل إرسال البيانات إلى قاعدة البيانات.
StringEscapeUtils.escapeHtml("بيانات التسجيل من واجهة المستخدم");
عادة، يفضل الناس استخدام الطريقة الأولى التي يتم مناقشتها في هذا التعليمات، وليس الطريقة الثانية. مشكلة الطريقة الثانية هي أن البيانات المشفرة بلغة HTML ستبقى في قاعدة البيانات في النهاية. بمعنى آخر، ستشمل البيانات في قاعدة البيانات أحرفًا غريبة. ما هي المضار؟ إذا كنت بحاجة إلى عرض بيانات قاعدة البيانات خارج صفحة الويب، فإنك ستواجه مشكلة. على سبيل المثال، لا يمكنك بسهولة عرض البيانات في تطبيق Windows Forms.
شكرًا للمشاركة من قبل المستخدمين: http://zxf-noimp.iteye.com/blog/1130771
هذا هو محتوى المقال الكامل، آمل أن يكون قد ساعد في تعلمكم، وآمل أن تدعموا تعليمات الصراخ كثيرًا.
البيان: محتويات هذا المقال تم جمعها من الإنترنت، ويتمتع مالكها بحقوق الطبع والنشر، ويتم جمع المحتوى من قبل مستخدمي الإنترنت بشكل متعاون، ولا يمتلك هذا الموقع حقوق الملكية، ولا يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا اكتشفت محتوى يشتبه في انتهاك حقوق النسخ، فلا تتردد في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) للإبلاغ، وتقديم الدليل المتعلق، وإذا تم التحقق من صحة المعلومات، سيتم حذف المحتوى المزعوم فوراً.