في الآونة الأخيرة ، خرجت الأخبار. استخدم أربعة موظفين من قسم أمان الشبكة في Alibaba نقاط الضعف في صفحة الويب لكتابة نصوص JS للاستيلاء على كعكات القمر ، لذلك كانت مفتونًا. لقد أرادوا معرفة كيفية كتابة هذا البرنامج النصي JS وكيفية تنفيذ مختلف الطلبات والاستيلاء على السلاح.
ما هو هجوم حقن جافا سكريبت؟
1. كلما تم إدخال المحتوى الذي أدخله المستخدم وإعادة تشغيله ، يكون الموقع عرضة لهجمات حقن JavaScript. دعونا نلقي نظرة على تطبيق محدد عرضة لهجمات حقن JavaScript. لنفترض تم إنشاء موقع ردود فعل العملاء. يمكن للعملاء زيارة الموقع وإدخال معلومات التعليقات حول المنتج. عندما يقدم العميل التعليقات ، يتم إعادة تشغيل معلومات التعليقات على صفحة التغذية المرتدة.
موقع ملاحظات العملاء هو موقع ويب بسيط. لسوء الحظ ، هذا الموقع عرضة لهجمات حقن جافا سكريبت.
لنفترض أن النص التالي يجري إدخاله في نموذج ملاحظات العملاء:
<script> Alert (Attack!) </script>
يمثل هذا النص البرنامج النصي JavaScript يعرض مربع رسالة التحذير. بعد أن يقدم شخص ما هذا البرنامج النصي إلى نموذج ملاحظات العملاء ، هجوم الرسائل! سيتم عرضه عندما يزور أي شخص موقع ملاحظات العملاء في المستقبل.
2. نوع آخر هو إدخال جزء من رمز JS في شريط عنوان المتصفح لتغيير محتوى الصفحة JS وعلامات الصفحات.
باستخدام حقن JavaScript ، يمكن للمستخدمين تغيير محتواهم دون إغلاق أو حفظ صفحات الويب ، والتي تتم على شريط عناوين المتصفح. بناء جملة الأمر كما يلي:
JavaScript: Alert (#command#)
على سبيل المثال ، إذا كنت ترغب في رؤية مربع تحذير في حالة تأهب على موقع http://www.example.com ، فأدخل أولاً عنوان URL في شريط العناوين وانتظر حتى يتم تحميل الصفحة ، ثم حذف عنوان URL وإدخال:
JavaScript: Alert (Hello World)
كعنوان URL جديد. سيظهر هذا مربع تحذير Hello World ، باستخدام هذه التقنية لتغيير أي شيء تقريبًا على صفحة الويب ، مثل الصورة. لنفترض أن هناك صورة شعار موقع ويب ، ونجد واحدة من رمز HTML من خلال النظر في ملف مصدر الصفحة:
<img name = hi src = hello.gif>
تم تسمية الصورة مرحبًا ، الملف المصدر هو hello.gif ، نريد تغييره إلى ملف bye.jpeg المخزن على موقعنا (http://www.mysite.com) ، وبالتالي فإن عنوان URL الكامل للصورة هو http://www.mysite.com/bye.jpeg ، باستخدام javaScript.
JavaScript: Alert (document.hi.src = http: //www.mysite.com/bye.jpeg)
سترى http://www.mysite.com/bye.jpegalert منبثقة ، ويتم تغيير الصورة. تجدر الإشارة إلى أن هذه التغييرات مؤقتة فقط! إذا قمت بتحديث الصفحة أو إعادة إدخال التغييرات الخاصة بك ، فستختفي التغييرات لأنك أجريت هذه التغييرات على جهاز الكمبيوتر الخاص بك ، وليس على خادم الويب.
باستخدام نفس الطريقة ، يمكننا عرض أو تغيير قيمة المتغير ، على سبيل المثال ، نجد قطعة من الرمز مثل هذا على صفحة الويب:
<script language = javaScript> var a = test </script>
وهذا يعني أن قيمة المتغير A هي اختبار ، والآن ندخل:
جافا سكريبت: تنبيه (أ)
ثم نغير قيمتها إلى مرحبا:
JavaScript: ALERT (A = Hello)
عادةً ما يتم استخدام حقن JavaScript لتغيير خصائص النماذج ، على افتراض أن هناك قطعة رمز مثل هذا:
<name form = format action = send.php method = post> <input type = hidden name = mail [email protected]> <input type = text name> <type type = proffic
نريد إرسال النموذج إلى صندوق البريد الخاص بنا ، وليس شخصًا@somewhere.com. يمكنك استخدام الأمر التالي:
JavaScript: Alert ([email protected])
• ربما لاحظت العلاقة الهرمية لهذه الأوامر:
• نوضح بالترتيب من اليسار إلى اليمين:
• 1) أقصى اليسار هو المستند
• 2) ثم هناك اسم الكائن الذي نريد تغييره (مثل المستند. hi.src) أو الكائن الذي يحتوي عليه (مثل المستند.
• 3) أخيرًا ، هناك الخاصية التي نريد تغييرها (مثل مسار المصدر: document.hi.src ، أو القيمة المتغيرة: document.format.mail.value)
• 4) استخدام. فصل العدد
• 5) عندما نريد تغيير قيمة السمة ، نستخدم = علامة وقيمة السمة الجديدة
•*ملاحظة: عندما تكون قيمة السمة الجديدة عبارة عن سلسلة (على سبيل المثال: [email protected]) ، يجب إرفاقها في عروض أسعار مزدوجة.
• إذا كنا نريد استخدامه كقيمة لمتغير ، فلن نحتاج إلى استخدام عروض أسعار مزدوجة. على سبيل المثال ، إذا كنا نريد تعيين قيمة المتغير B للمتغير A ، فيمكننا إدخال JavaScript: ALERT (A = B).
• ومع ذلك ، فإن معظم العلامات في الصفحة لا تحتوي على أسماء ، مثل:
<form action = send.php method = post> <input type = hidden name = mail [email protected]> <input type = text name> <input type = product value = submit> </pott>
لا يوجد اسم نموذج في هذا الرمز. بناءً على المعلومات أعلاه ، يمكنك استخدام هذا الأمر:
JavaScript: ALERT (وثيقة.. mail.value = [email protected])
في هذه الحالة ، يجب أن نحسب وإيجاد رقم تسلسل النموذج ، وما يلي مثال:
<form action = send.php method = post> <input type = text name = name> <type type = submit value = pridt> </form> <form action = send.php method = post> <input type = hidden name = mail [email protected]> <input type = text name> <input type = product value>/form> القيمة = إرسال> </form>
• في الكود أعلاه ، نرى 3 نماذج ، لكننا مهتمون فقط بالثاني ، وبالتالي فإن رقم النموذج الذي نريده هو 2. لا تنسى أننا نبدأ من 1 ، مثل 1 ، 2 ، 3 ، 4 ... بينما يبدأ JavaScript من 0 ، مثل 0 ، 1 ، 2 ، 3 ... لذلك فإن رقم النموذج الحقيقي هو 1 ، لا يتعين علينا عادة طرح رقم النموذج الموجود على واحد. سوف نستخدم هذا الرقم التسلسلي لإكمال أمرنا:
JavaScript: ALERT (document.forms [1] .mail.value = [email protected])
• بهذه الطريقة يمكنك تغيير الصورة أو الرابط بدون اسم ، ويمكنك تغيير النماذج إلى أي نوع علامة تريده. للصور
JavaScript: ALERT (document.images [3] .SRC =#عنوان URL للصورة التي تريدها#)
من أجل الرابط
JavaScript: ALERT (document.links [0] .href =#عنوان URL الذي تريده#)
أخيرًا ، يمكننا استخدام هذه التقنية لتحرير ملفات تعريف الارتباط. تتم كتابة الأمر التالي بواسطة DR_AMADO من triviasecurity.net ، وقمت بتعديله قليلاً فقط للسماح له بالظهور قبل تعديل المستخدم. تحتاج فقط إلى نسخها إلى شريط العناوين:
javaScript: ALERT (window.c = function a (n ، v ، nv) {c = document.cookie ؛ c = c.subString ( c.length)) ؛ nc = unescape (c) .replace (v ، nv) ؛ document.cookie = n+=+excart (nc) ؛ return unescape (document.cookie) ؛}) ؛ erip ('ملف تعريف الارتباط هو:'+document.cookie+'')// إذا كنت ترغب في تغيير ملف تعريف الارتباط يدويًا ، فيمكنك استخدام الأمر التالي:
JavaScript: Alert (document.cookie)
سيعرض هذا ملف تعريف الارتباط الحالي الخاص بك ، بافتراض userId = 1 ، إذا كنت تريد تغييره إلى userId = 2 ، يمكنك استخدام الأمر التالي:
JavaScript: ALERT (document.cookie = userId = 2)
أخيرًا ، يجب أن أؤكد أن جميع التغييرات موجودة فقط على جانب العميل! إنه مثل حفظ صفحة ويب على جهاز الكمبيوتر الخاص بك وتعديلها. ومع ذلك ، باستخدام هذه الخدعة ، لا يزال بإمكانك خداع الصفحة (مثل ملفات تعريف الارتباط) أو التحقق من الأمان. على سبيل المثال ، ستكتشف بعض صفحات الويب الموقع الذي يرسله المستخدم البيانات. إذا قمت بإرسال بيانات من http://www.test.com/form.php إلى http://www.test.com/check.php ، فقد يكتشف check.php ما إذا كانت البيانات تأتي من النموذج على http://www.test.com/form.php. إلى جانب ذلك ، إذا كنت تخطط لإدخال رمز JavaScript الخاص بك في الصفحة ، باستخدام بعض هذه الحيل ، فستتمكن من تغيير الصورة وتركها كما هي!
أخيرًا ، نظرًا لأن حقن JS أمر فظيع للغاية ، فما هي الحلول التي يجب أن نمنعها لحقن JS على موقع الويب الذي كتبناه أنفسنا؟
الطريقة 1:
تتمثل إحدى الطرق السهلة لمنع هجمات حقن JavaScript في تشفير البيانات التي أدخلها أي مستخدم موقع في HTML عند إعادة تشغيل البيانات في العرض.
على سبيل المثال: <٪ = html.encode (Feedback.message) ٪>
ما معنى استخدام HTML لترميز سلسلة؟ عند استخدام HTML لتشفير السلاسل ، يتم استبدال الأحرف الخطرة مثل <و> بكيانات HTML مثل <و>. لذلك ، عندما يتم تشفير السلسلة <script> (boo!) </script> باستخدام HTML ، سيتم تحويلها إلى <script> Alert (Attack!) </script>. لم يعد المتصفح ينفذ نصوص JavaScript عند تحليل السلاسل المشفرة. بدلاً من ذلك ، يظهر صفحات غير ضارة.
الطريقة 2:
بالإضافة إلى استخدام HTML لتشفير البيانات عند عرض البيانات في عرض ، يمكنك أيضًا استخدام HTML لتشفير البيانات قبل إرسالها إلى قاعدة البيانات.
StringesCapeutils.escapehtml (البيانات المقدمة من مكتب الاستقبال) ؛
في كثير من الأحيان ، يفضل الناس استخدام الطريقة الأولى التي تمت مناقشتها في هذا البرنامج التعليمي وليس الطريقة الثانية. المشكلة في النهج الثاني هي أن البيانات المشفرة HTML سيتم الاحتفاظ بها في نهاية المطاف في قاعدة البيانات. بمعنى آخر ، سوف تحتوي البيانات الموجودة في قاعدة البيانات على أحرف غريبة. ما هو عيب هذا؟ إذا كنت بحاجة إلى عرض بيانات قاعدة البيانات في نموذج آخر غير صفحة ويب ، فسوف تواجه مشاكل. على سبيل المثال ، لا يمكن عرض البيانات بسهولة في تطبيقات نماذج Windows.
شكرًا لك على الإنترنت على المشاركة: http://zxf-noimp.iteye.com/blog/1130771
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.