معهد ماساتشوستس للتكنولوجيا. محاضرة رقم 6.858. "أمن أنظمة الكمبيوتر." نيكولاي زيلدوفيتش ، جيمس ميكنز. 2014 سنة
أمان أنظمة الكمبيوتر هي دورة حول تطوير وتنفيذ أنظمة الكمبيوتر الآمنة. تغطي المحاضرات نماذج التهديد ، والهجمات التي تهدد الأمن ، وتقنيات الأمان بناءً على العمل العلمي الحديث. تشمل الموضوعات أمان نظام التشغيل (OS) ، والميزات ، وإدارة تدفق المعلومات ، وأمان اللغة ، وبروتوكولات الشبكة ، وأمان الأجهزة ، وأمان تطبيقات الويب.
المحاضرة 1: "مقدمة: نماذج التهديد"
الجزء 1 /
الجزء 2 /
الجزء 3المحاضرة 2: "السيطرة على هجمات القراصنة"
الجزء 1 /
الجزء 2 /
الجزء 3المحاضرة 3: "تجاوزات العازلة: المآثر والحماية"
الجزء 1 /
الجزء 2 /
الجزء 3المحاضرة 4: "فصل الامتيازات"
الجزء 1 /
الجزء 2 /
الجزء 3المحاضرة 5: "من أين تأتي أنظمة الأمن؟"
الجزء 1 /
الجزء 2المحاضرة 6: "الفرص"
الجزء 1 /
الجزء 2 /
الجزء 3المحاضرة 7: "وضع حماية العميل الأصلي"
الجزء 1 /
الجزء 2 /
الجزء 3المحاضرة 8: "نموذج أمن الشبكات"
الجزء 1 /
الجزء 2 /
الجزء 3المحاضرة 9: "أمان تطبيق الويب"
الجزء 1 /
الجزء 2 /
الجزء 3المحاضرة 10: "التنفيذ الرمزي"
الجزء 1 /
الجزء 2 /
الجزء 3المحاضرة 11: "لغة برمجة Ur / Web"
الجزء 1 /
الجزء 2 /
الجزء 3 بعد ذلك بقليل ، سأخبرك عن الطلبات المزيفة عبر المواقع. أعتقد أن ملاحظات المحاضرة تشرح لماذا لا تعمل البرمجة النصية المتقاطعة في حالتنا. والسبب هو أنه كلما قمت بإنشاء "قطعة" من بناء الجملة ، فإن هذا الكائن والشجرة وأجزاء مختلفة من هذه الشجرة ليست مجرد سلاسل.

لا يمكنك تحويل سلسلة مستخدم عن طريق الخطأ إلى شجرة هيكل ، وهذا لا يحدث تلقائيًا ، لأنه من الصعب كتابة مثل هذا المترجم. ولكن يمكنك محاولة كتابة مترجم لـ Ur / Web. سأعطيكم قريباً مثالاً سيساعدكم على تقليل قلقكم بشأن ذلك. أريد أن أريكم ما الذي تتحول إليه هذه الصيغة بالفعل في المترجم.
قد يبدو أنه يمكننا فقط إضافة علامات اقتباس مزدوجة حول HTML حتى نتمكن من العودة إلى العالم العادي. قد يتساءل المرء لماذا من المهم للغاية تخطي علامات الاقتباس المزدوجة ، ووضع XML بدلاً من ذلك؟
يمكنك أن تأخذ كلامي لأن هذا هو الرمز المكافئ لما يفعله. فيما يلي علامة دالة مضمنة تنشئ العقدة الشجرة لمستند HTML. بعد ذلك ، أضع الحجج التي تعبر عن نمط CSS في هذه العقدة. لا يحدث شيء هنا في الواقع ، لذلك هناك العديد من الطرق المختلفة لقول "لا شيء" ، ولا يتطلب أي سمات.
بعد ذلك أضع علامة الجسم ، وهذا شيء آخر من المكتبة القياسية. جميع العلامات القياسية هي وظائف من الدرجة الأولى في المكتبة.

بعد ذلك ، نحتاج إلى وضع النص "Hello World" في النص ، لذلك نسمي وظيفة cdata ، حيث cdata هي كلمة XML لبيانات الأحرف أو مجرد سلسلة ثابتة ، ويمكننا وضع النص هنا. هذا يجب أن يعطينا نفس النتيجة كما كان من قبل. دعونا نرى ما إذا كان هذا يعمل.
الآن سأعود إلى الصفحة. نرى نفس الشيء كما كان من قبل ، لذلك هذا هو نفس الوظيفة التي كانت في البداية.

هذا ليس مجرد بناء خط. يؤدي هذا إلى سلسلة من العمليات التي تم تصميمها بحيث تسمح لك فقط بإنشاء HTML صالح ، ولن يتمكنوا مطلقًا من تفسير السطر بشكل ضمني على أنه رمز بدلاً من مجرد وضع المحتوى على الصفحة التي يجب أن تكون هناك.

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

ترى ما حدث في الصفحة - لم تصبح الكلمة غامقة لأن المترجم يظهر كيف يتم تفسير النص بدلاً من الترميز. هذا هو تمثيل بناء جملة HTML كدالة تبني بناء الجملة دون اصطلاحات الترميز المعتادة المضمنة فيه. تفسر هذه الوظيفة كل شيء بالطريقة التي تريد أن تكتبها ، دون التفكير في أي شيء من نفسك.
وبالتالي ، فإن تنفيذ cdata يفعل ما يسمى عادة الهروب ، أو "الهروب". لكن المبرمج لا يحتاج إلى معرفة أن هناك شيء مثل الهروب. يمكنك التفكير في الأمر كمجموعة من الوظائف الملائمة لإنشاء شجرة كائن تصف الصفحة.
أسمع أنك تريد أن ترى HTML الذي تم إنشاؤه هنا. حسنًا ، لن يكون هذا هو الشيء الأكثر إثارة. سأحاول تكبيره على الشاشة ، ولكن بعد ذلك لا يتناسب مع سطر واحد.
الطالب: نظرًا لأنك تستخدم XHTML ، فهل يمكنك فقط استخدام المسار لبيانات أحرف cdata بدلاً من القيام بذلك يدويًا؟
البروفيسور: أعتقد ، لكن هذا سيتطلب مني XML أكثر مما لدي. كان هناك سؤال جيد آخر حول عناوين URL JavaScript. إذا سمحنا بعناوين URL لـ JavaScript ، فإننا ننشئ بابًا خلفيًا لتفسير السلاسل تلقائيًا كبرامج في وقت التشغيل. وهذا يسبب كل أنواع المشاكل.
دعونا نحاول تجنبه. سأعود أولاً وقبل كل شيء إلى النسخة المختصرة ، وأرسم بعض الخطوط داخل الجسم. ودعونا نضع رابطًا سيحاول القيام بشيء مناسب. هنا نترك مساحة لرسائل الخطأ.

بعد ذلك ، قم بتشغيل المترجم وانظر كيف يعمل.

عنوان URL غير صالح ، ثم إدخال جافا سكريبت وعبارة "تمرير للبركة" ، أو "تمرير مباركة". يبارك Bless في الوظيفة ، وهي حارس البوابة الذي يحل عنوان URL. افتراضيًا ، لا يُسمح بعناوين URL ، لذلك بالطبع هذا الخيار غير مسموح به. بشكل عام ، إنها فكرة سيئة كتابة سياسة URL الخاصة بك بحيث يمكنك إنشاء قيم تمثل عناوين URL JavaScript. لأن كل أنواع الضمانات ستكون مطلوبة ، لأن هذه العناوين قد تكون غير صالحة.
لتوضيح كيفية عمل ذلك بشكل أوضح ، دعني أقوم بتحليل هذا الرمز إلى وظيفة منفصلة تستدعي الرابط الذي يقبل عنوان URL. وبالتالي ، يعد عنوان URL نوعًا وليس سلسلة. هذا هو النوع الذي يشير إلى عنوان URL ، وهو ما تسمح به سياسة التطبيق صراحةً.
أستخدم الأقواس المتعرجة ، كما هو الحال في بعض أطر قالب HTML الشائعة ، للإشارة إلى إدراج بعض التعليمات البرمجية من لغة المضيف داخل HTML التي نقوم بإنشائها. ويتم كل هذا بطريقة يتم التحقق من النوع بشكل ثابت. لذلك سيتحقق النظام: "نعم ، هذا هو المكان الذي ينتمي إليه عنوان URL ، ويقول إنه عنوان URL حقًا ، لذلك كل شيء على ما يرام."

وبعد ذلك يمكنني ترتيب نداء المباركة صراحةً بقول: "دعنا نسمي وظيفة الرابط هنا بناءً على نتائج" نعمة "عنوان URL هذا. بعد ذلك ، يجب أن نحصل على نفس رسالة الخطأ كما كان من قبل.

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

دعونا نجعلها أكثر إثارة. انا ذاهب لفتح ملف تكوين لهذا العرض التوضيحي. إنها قصيرة جدًا ، على الأقل إذا نظرت إلى أي إطار عمل لتطبيق ويب Java. لديهم ملفات XML العملاقة للتكوين ، لذلك كل شيء أفضل بكثير معنا.

يمكننا إضافة قاعدة تنص على أن كل شيء على ويكيبيديا مسموح به ، ثم وضع عنوان URL الخاص بالموسوعة في النص.

انتقل الآن إلى الصفحة وانقر فوق الرجاء انقر.

إليك ما حصلنا عليه: لم يتم العثور على عنوان ويكيبيديا.

لذا فإن الفكرة الرئيسية هي أن يكون لديك نوع مجرد من عنوان URL ، كما لو كان لديك نوع تجريدي من جدول التجزئة الذي يشفر تنويعات ما يبدو عليه جدول التجزئة ويحول دون دخول الشفرة إلى مصفوفة جدول التجزئة. يمكننا أن نفعل نفس الشيء لعنوان URL. باستخدام هذه الوظيفة المباركة ، يضمن النظام أن كل قيمة من هذا النوع تجتاز فحصًا مناسبًا في مرحلة ما.
على سبيل المثال ، باستخدام هذه السياسة ، نعلم أنه لن يكون لدينا مطلقًا عنوان URL لجافا سكريبت ، لذا يمكنك أن تأخذ قيمة عنوان URL بأمان واستخدامه كرابط. هذا لن يكسر التجريد الأساسي للغة.
الطالب: هل من الممكن استخدام جافا سكريبت "خالص" بإدخاله في سلسلة النص؟
الأستاذ: نعم ولا. بدلاً من جافا سكريبت ، يمكنك تضمين رمز Ur / Web الذي يؤدي نوعًا من المهام. الآن سأكتب الأمر:
return <xml><body onload = {alert “LOADED”}>
وسترى ما حدث - وضع المترجم نافذة على الشاشة عليها نقش "محمل" - "محمل".

محاولة تفسير شفرة JavaScript في شكل سلسلة كبرنامج سيكون كارثة. كما ترون ، يمكننا وضع التعليمات البرمجية في نفس لغة البرمجة التي تعمل بها ، مقيدة بالفعل بهذه الأقواس المتعرجة. ثم يتم تجميعها تلقائيًا في جافا سكريبت لتعمل على جانب العميل.
ألاحظ أن الإصدارات الأحدث من المتصفحات قادرة على تجنب أخطاء تفسير الأحرف ، ولكن بعض المتصفحات القديمة قادرة على إرباك شيء ما. على أي حال ، سيتم تفسير جميع عناصر الحرف على أنها UTF-8 إذا دخلت الوثيقة. إذا كان هناك أي مشكلة في ترميز مختلف ، فلا يجب تطبيق هذا الترميز هنا.
الطالب: يقوم المترجم بالتحقق مما إذا كانت السلسلة تحتوي على عنوان URL صالح. ولكن إذا قمت بحساب سلسلة في وقت التشغيل ، فهل تحقق في وقت التشغيل ما إذا كانت سلسلة معينة صالحة أم لا؟
البروفيسور: لنقم بإنشاء نموذج لاختبار هذا البيان ، ونضعه هنا. نقوم بإدخال عنوان URL الخاص بنا في مربع نص URL ، ثم نقوم بإدراج زر الإرسال.

عند النقر عليها ، سيتم استدعاء وظيفة الرابط بكتابة قيمة واحدة لكل حقل في النموذج. في هذه الحالة ، يوجد حقل واحد فقط يسمى "URL" ، لذلك سيقوم الرابط بمعالجة الإدخال الذي يحتوي على عنوان URL كنوع سلسلة. ثم نحاول تطبيق وظيفة النعمة عليها ومعرفة ما إذا كانت تعمل.

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

الآن قم بتشغيل المترجم ، اذهب إلى صفحتنا ، انقر على زر "الرجاء النقر" ، أدخل بعض العناوين غير الواضحة.

ثم نضغط على إرسال الاستعلام - "إرسال طلب" ونحصل على رسالة خطأ - لم يتم حل عنوان هذا النوع.

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

أعتقد أن الإجابة على سؤالك كانت طويلة وليست مثيرة للغاية.
الطالب: هل هناك شروط أكثر صرامة لعناوين URL إلى جانب حظر استخدام جافا سكريبت؟
البروفيسور: في الوقت الحالي ، القيود الأكثر صرامة هي مجرد ثوابت وبادئات. ولكن يمكنك أيضًا إنشاء قواعد الحظر الخاصة بك ، وستعمل بالترتيب الذي تكتب به.
الطالب: اتضح أنه إذا التزمت بحظر جافا سكريبت ، ولكنك وضعت فاصل أسطر في منتصف كلمة "جافا سكريبت" ، فإن المترجم يمكنه تفسير ذلك ...
الأستاذ: نعم ، هذا سيكون سيئا للغاية. لهذا من الجيد الالتزام بنهج القائمة البيضاء بدلاً من استخدام نهج القائمة السوداء. ربما تريد أن تبدأ جميع القواعد ببروتوكول معين ، مثل HTTP ، وتسمح فقط بما يلائم مجموعة البروتوكولات المعتمدة الخاصة بك. أوصي بفعل ذلك فقط.
الطالب: بالنسبة للعديد من المواقع ، يمكنك السماح للمستخدمين بتبادل الروابط ، وفي هذه الحالة تحتاج إلى السماح بالروابط في كل مكان.
البروفيسور: يمكنك السماح بالروابط إذا كنت تريد أن يشارك المستخدمون روابط جافا سكريبت أو ، لا أعرف ، روابط الفلاش ، أو أي شيء مسموح به هناك. كما ترى ، يمكنك إنشاء "قائمة بيضاء" لجميع HTTP و HTTPS وعناوين URL وبالتالي ضمان التشغيل الآمن لمعظم المواقع. هذا النهج أضعف قليلاً من السماح بعناوين URL محددة فقط. ولكن على الأقل يمكنك القضاء تمامًا على إمكانية التنفيذ التلقائي لسلسلة كبرنامج.
اسمحوا لي أن أقدم لكم مثالاً واحدًا على الملخص ، وهو مثال لنظام غرفة الدردشة البسيط المقدم في قاعدة البيانات. يمكن للمستخدم النقر على الرابط للذهاب إلى الغرفة ثم إرسال رسالة. هذا هو الأول من عدة خيارات للمخطط.

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

الآن ظهروا هنا.

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

مرة أخرى ، سنراجع بسرعة كيف يعمل ، لذلك لدينا هذين الجدولين SQL - غرفة الطاولة ورسالة الجدول ، والتي تم الإعلان عنها ببساطة في هذه الفئة الأولى داخل لغة البرمجة. ونقدم مخططًا لكل جدول. وبعد ذلك ، عندما نحاول الوصول إلى هذه الجداول ، يتأكد المترجم من أنه يتم الوصول إليها وفقًا لنظام كتابة واعد.

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

نقوم بتشغيل استعلام SQL - سترى مثالاً على بناء جملة SQL المضمنة في Ur / Web. لا أريد الدخول في مكالمات وظيفية من خلال هذا الامتداد من المكتبة القياسية. سيكون الأمر مطولًا إلى حد ما ، يكفي تذكر كلماتي حول حقيقة أن المكتبة القياسية لديها طرق لاستدعاء الوظائف التي تعد طرقًا صالحة لإنشاء استعلام SQL.
وهذه الوظائف لها أنواع تجعلها طلبات طباعة لك ، ولا تضمن فقط أن بناء الجملة صالح. يتكرر هذا الرمز ببساطة عبر جميع الأسطر التي خرجت من هذا الاستعلام ويولد أجزاء من كود HTML لكل منها.
على وجه الخصوص ، سنقوم بوضع نتيجة الاستعلام في حقل العنوان وتحويلها إلى HTML بتدوين يحتوي على أقواس متعرجة. تشير الأقواس المربعة أيضًا إلى أن هذا ليس جزءًا حقيقيًا من HTML حتى الآن ، ولكن يرجى تحويله لي بطريقة قياسية. حتى نتمكن من القيام بالأوتار والأعداد الصحيحة وجميع البيانات من أنواع أخرى.
الطالب: إذا كان يحتوي على HTML خبيث أو أي شيء آخر ، فهل سيتم تصفيته؟
الأستاذ: نعم. في Ur / Web ، يمكنك التفكير في الأمر على أنه بناء شجرة. هذه عقدة تعني بعض النصوص. من الواضح أن النص لا يمكنه فعل أي شيء.
الطالب: إذن إذا كان هذا الرأس تحت سيطرة المستخدم وأجرى شخص ما محادثة بعنوان التنبيه ، ألن يكون JavaScript؟
البروفيسور: لن يتم تفسيره تلقائيًا على أنه JavaScript أو HTML أو أي شيء آخر. سوف ينظر إليه البرنامج على أنه نص عادي.
لذا ، عد إلى صورتنا على الشاشة. لدينا هذا العنوان ، دعنا نضعه في إطار مع العلامات. وبدلاً من href ، الطريقة المعتادة للربط في HTML ، نستخدم سمة الرابط ، وهي نوع من السمة الزائفة ur / web التي لا تأخذ كحجة وليس عنوان URL ، ولكن في الغالب تعبيرات Ur / Web. النقطة هي أنه عند النقر فوق هذا الارتباط ، يتم تشغيل هذا التعبير لإنشاء صفحة جديدة يجب عرضها.
في هذه الحالة ، نقوم بإجراء مكالمة إلى وظيفة الدردشة ، والتي يتم تعريفها هنا في الشاشة التالية ، وهذا ما هو عليه.

لن أخوض في التفاصيل. ولكن لدينا عدد قليل من استعلامات SQL الأخرى باستخدام وظائف مكتبة قياسية مختلفة لطرق مختلفة لاستخدام النتائج المطلوبة.
نقوم بإنشاء صفحة HTML هذه ونقول إنك في محادثة بعنوان العنوان هذا ، لدينا نموذج نموذج حيث يمكن للمستخدم إدخال نص. هذا هو النموذج الذي استخدمته لشرح كيفية عمل البرنامج قبل بضع دقائق. يحتوي زر نموذج الإرسال على سمة إضافة تحتوي على say ، وهو اسم وظيفة Ur / Web. لذلك ، عندما نقدم النموذج ، فإننا نسمي هذه الوظيفة.
يؤدي تشغيل المزيد من SQL إلى إدراج صفوف جديدة في الجدول. ننتقل تلقائيًا من معرف غرفة الدردشة إلى الحقول النصية الواردة هنا من النموذج ، ويتم إخفاؤها تلقائيًا حسب الحاجة. ولكن مرة أخرى ، في Ur / Web ، لا تحتاج إلى التفكير في "الهروب" من الوظيفة بهذه الطريقة. لأنه مجرد بناء لبناء شجرة ، وليس لسلسلة. وبالتالي ، لا توجد طريقة يمكن أن تحدث بها أشياء غريبة للتحليل الذي لا تتوقعه من الطريقة المختارة لتفسير بناء الجملة.
لذا ، حقيقة أن لدينا عنصر واجهة مستخدم في هذا النموذج في شكل واجهة المستخدم الرسومية الرسومية ، وهذا حقل نصي ، يستنتج المترجم أن السجل الناتج عن ملء نموذج مربع النص يجب أن يحتوي على عنصر واحد يسمى "نص" من نوع السلسلة . لا يتم تضمين ترميز النموذج وقواعد الكتابة فيه في اللغة ، ولكن يتم أخذه من مكتبة Ur Express ، التي تتحكم بالفعل في هذه النماذج ، وتحديد أنواع الوظائف الصالحة.
إذا لم يكن لديك المزيد من الأسئلة حول هذا الجزء من البرنامج ، فسوف أنتقل إلى الخطوة التالية. سأستخدم طريقة لفرض تغليف أجزاء مختلفة من تطبيق يدعم Ur / Web ونادراً ما يدعم لغات أخرى. سوف آخذ هذه الغرفة. سوف أقوم بأخذ بعض التعاريف وأضعها في وحدة تحتوي على بعضها على أنها خاصة. على وجه الخصوص ، ستكون جداول قاعدة البيانات خاصة ، لذلك لن يتمكن أي شخص من الوصول إليها مباشرة.
يمكنك الوصول إليها فقط باستخدام مجموعة الطرق التي نقدمها. يتم تشغيل إحدى الطرق داخل المعاملة وتقوم بإنشاء قائمة بالسجلات ذات حقول المعرف والعنوان لغرف الدردشة المتاحة.
بعد ذلك ، نقوم فقط بتوسيع عملية الدردشة هذه. والشيء الوحيد الذي فعلته هنا هو إدخال اسم لمعرف المفهوم - نوع معرف. لذلك أنا لا أقول فقط أن المعرف عدد صحيح ، بل أقول أن هذا هو نوع جديد.

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

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

ثم يمكننا أن نفعل ما نريد مع هذا الجدول. سأقوم بتجميعها ، ربما في 30 ثانية ، وسنرى ما سيحدث. ولكن في الواقع هذا جدول مختلف ، كما لو كان لديك نفس الاسم الخاص ، ولكن لفئتين مختلفتين من Java.
لذا ، تفترض أنه يوجد داخل هذه الوحدة نمط مجردة يسمى الغرفة ، والذي يحتوي على معرف الهوية وعنوان العنوان. هذا غير صحيح. يقبل Chat معلمات الغرفة كمدخلات. عندما نستدعي وظيفة الدردشة ، سيتم استدعاؤها عبر عنوان URL. يتم تمرير المعرف والعنوان خارج تمثيل عنوان URL الذي يستدعي الوظيفة. نحن بحاجة فقط إلى معرف لتنفيذ هذه الوظيفة. لذلك عندما نستدعي الوظيفة ، نسمي عنوان URL في الواقع.
سيكون تبذيرًا من حيث استخدام المساحة وسيبدو وقحًا للمستخدم إذا تم تمرير الرأس كوسيطة إضافية عند استدعاء الدردشة عبر عنوان URL. هل هذا منطقي؟ لنلق نظرة على شريط URL في هذه الشريحة.

يتم تسلسل معرف القناة التي نتابعها تلقائيًا إلى عنوان URL في نهاية السطر. وإذا أرسلنا سجلاً يحتوي على المعرف وعنوان العنوان ، فسيتم إجراء تسلسل لهذا العنوان أيضًا ، وهو أمر غير منطقي على الأقل.
54:10
دورة معهد ماساتشوستس للتكنولوجيا "أمن أنظمة الكمبيوتر". المحاضرة 11: لغة برمجة Ur / Web ، الجزء 3النسخة الكاملة من الدورة متاحة
هنا .
شكرا لك على البقاء معنا. هل تحب مقالاتنا؟ هل تريد رؤية مواد أكثر إثارة للاهتمام؟ ادعمنا عن طريق تقديم طلب أو التوصية به لأصدقائك ،
خصم 30 ٪ لمستخدمي Habr على نظير فريد من خوادم مستوى الدخول التي اخترعناها لك: الحقيقة الكاملة حول VPS (KVM) E5-2650 v4 (6 نوى) 10GB DDR4 240GB SSD 1Gbps من 20 $ أو كيفية تقسيم الخادم؟ (تتوفر الخيارات مع RAID1 و RAID10 ، حتى 24 مركزًا وحتى 40 جيجابايت DDR4).
VPS (KVM) E5-2650 v4 (6 نوى) 10GB DDR4 240GB SSD 1Gbps حتى ديسمبر مجانًا عند الدفع لمدة ستة أشهر ، يمكنك الطلب
هنا .
ديل R730xd أرخص مرتين؟ فقط لدينا
2 x Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 TV من 249 دولارًا في هولندا والولايات المتحدة! اقرأ عن
كيفية بناء مبنى البنية التحتية الطبقة باستخدام خوادم Dell R730xd E5-2650 v4 بتكلفة 9000 يورو مقابل سنت واحد؟