مثال على أمان خدمات الويب (WS) باستخدام بروتوكول SOAP

⚡ ملخص ذكي

أمان خدمات الويب (WS-Security) هو معيار يحمي البيانات المتبادلة أثناء استدعاء خدمة ويب SOAP. يشرح هذا المورد التهديدات الأمنية والتدابير المضادة لها، ومعايير أمان خدمات الويب، وبناء خدمة ويب آمنة باستخدام بيانات الاعتماد، وأفضل ممارسات أمان خدمات الويب.

  • 🔐 المعيار الأساسي: يضيف WS-Security طبقة أمان إلى SOAP، ويحدد كيفية انتقال بيانات الاعتماد ومفاتيح التشفير داخل رأس SOAP.
  • 🌐 حدود بروتوكول HTTPS: يؤمّن بروتوكول HTTPS/SSL حركة المرور من نقطة إلى نقطة، ولكن في تدفقات الخوادم المتعددة، فإن WS-Security فقط هو الذي يحافظ على حماية الرسالة من البداية إلى النهاية.
  • 🎫 رموز الاعتماد: يتم تمرير بيانات الاعتماد باستخدام UsernameToken لاسم المستخدم وكلمة المرور، أو BinarySecurityToken لشهادات Kerberos أو X.509.
  • 🛠️ مثال على بناء آمن: تقوم خدمة الويب .Net ASMX بإضافة فئة AuthHeader بحيث يحمل رأس SOAP اسم المستخدم وكلمة المرور للمصادقة.
  • 📋 أفضل الممارسات: طلبات التدقيق والتسجيل، tracفي عمليات الأعمال التجارية، يجب التحقق من الهوية بشكل صحيح، وعدم تخزين أو تسجيل بيانات الاعتماد الحساسة مطلقًا.

أمان خدمة الويب

ما هو أمن WS؟

يُعدّ معيار أمان خدمات الويب (WS Security) معيارًا يُعنى بأمن البيانات المتبادلة ضمن خدمات الويب. وهذه ميزة أساسية في بروتوكول SOAP، مما يجعله شائعًا جدًا في إنشاء خدمات الويب.

يُعدّ الأمن ميزةً أساسيةً في أي تطبيق ويب. ونظرًا لأنّ معظم تطبيقات الويب مُتاحةٌ عبر الإنترنت، فإنّ هناك دائمًا احتمالًا لتعرّضها لتهديدات أمنية. لذا، عند تطوير...ping بالنسبة للتطبيقات المستندة إلى الويب، يُنصح دائمًا بالتأكد من تصميم التطبيق وتطويره مع مراعاة الأمن.

التهديدات الأمنية والتدابير المضادة

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

يُعدّ بروتوكول HTTPS أحد إجراءات الأمان المتاحة لبروتوكول HTTP. وهو وسيلة اتصال آمنة بين العميل والخادم عبر الإنترنت. يستخدم HTTPS طبقة المقابس الآمنة (SSL) لتأمين الاتصال. يمتلك كل من العميل والخادم شهادة رقمية للتحقق من هويتهما عند حدوث أي اتصال بينهما.

التهديدات الأمنية والتدابير المضادة لبروتوكول HTTPS

في عملية اتصال HTTPS القياسية بين العميل والخادم، تتم الخطوات التالية:

  1. يرسل العميل طلبًا إلى الخادم عبر شهادة العميل. عندما يرى الخادم شهادة العميل، فإنه يقوم بتدوين ملاحظة في نظام ذاكرة التخزين المؤقت الخاص به حتى يعرف أن الاستجابة يجب أن تعود فقط إلى هذا العميل.
  2. يقوم الخادم بعد ذلك بمصادقة نفسه للعميل عن طريق إرسال شهادته. وهذا يضمن أن العميل يتواصل مع الخادم الصحيح.
  3. تُشفّر جميع الاتصالات اللاحقة بين العميل والخادم. وهذا يضمن أنه في حال حاول أي مستخدم آخر اختراق الأمان والحصول على البيانات المطلوبة، فلن يتمكن من قراءتها لأنها ستكون مشفرة.

لكن هذا النوع من الأمان لن يكون فعالاً في جميع الحالات. فقد يأتي وقت يستطيع فيه العميل الاتصال بخوادم متعددة. يوضح المثال أدناه عميلاً يتصل بقاعدة بيانات وخادم ويب في آن واحد. في مثل هذه الحالات، لا يمكن لجميع المعلومات المرور عبر بروتوكول HTTPS.

التهديدات الأمنية والتدابير المضادة للخوادم المتعددة

هنا يأتي دور بروتوكول SOAP للتغلب على هذه العقبات من خلال تطبيق مواصفات أمان خدمات الويب (WS Security). وبموجب هذه المواصفات، تُعرَّف جميع البيانات المتعلقة بالأمان في عنصر رأس SOAP. ويمكن أن يحتوي عنصر الرأس على المعلومات المذكورة أدناه:

  1. إذا تم توقيع الرسالة الموجودة في نص SOAP باستخدام أي مفتاح أمان، فيمكن تعريف هذا المفتاح في عنصر الرأس.
  2. إذا تم تشفير أي عنصر داخل نص SOAP، فسيحتوي الرأس على مفاتيح التشفير اللازمة بحيث يمكن فك تشفير الرسالة عند وصولها إلى الوجهة.

في بيئة متعددة الخوادم، تساعد تقنية مصادقة SOAP المذكورة أعلاه بالطريقة التالية:

  • نظرًا لأن نص SOAP مشفر، فلن يكون من الممكن فك تشفيره إلا بواسطة خادم الويب الذي يستضيف خدمة الويب. هذا بسبب كيفية تصميم بروتوكول SOAP.
  • لنفترض أن الرسالة تم تمريرها إلى خادم قاعدة البيانات في طلب HTTP؛ لا يمكن فك تشفيرها لأن قاعدة البيانات لا تملك الآليات الصحيحة للقيام بذلك.
  • لن يتمكن خادم الويب من فك تشفير الرسالة وإرسال الاستجابة المناسبة إلى العميل إلا عندما يصل الطلب فعليًا إلى خادم الويب كبروتوكول SOAP.

سنرى في المواضيع اللاحقة كيف يمكن استخدام معيار أمان خدمات الويب لـ صابون.

معايير أمان خدمة الويب

كما ذُكر في القسم السابق، يتمحور معيار WS-Security حول تضمين تعريف الأمان في رأس SOAP. وتُدار بيانات الاعتماد في رأس SOAP بطريقتين.

أولاً، يُعرّف عنصرًا خاصًا يُسمى UsernameToken. يُستخدم هذا العنصر لتمرير اسم المستخدم وكلمة المرور إلى خدمة الويب. أما الطريقة الأخرى فهي استخدام رمز ثنائي عبر BinarySecurityToken. يُستخدم هذا في الحالات التي تُستخدم فيها تقنيات التشفير مثل Kerberos أو X.509.

يوضح الرسم التخطيطي أدناه آلية عمل نموذج الأمان في WS Security.

سير عمل معايير أمان خدمات الويب

فيما يلي الخطوات التي تتم في سير العمل المذكور أعلاه:

  1. يمكن إرسال طلب من عميل خدمة الويب إلى خدمة رمز الأمان. قد تكون هذه الخدمة خدمة ويب وسيطة مصممة خصيصًا لتوفير أسماء المستخدمين/كلمات المرور أو الشهادات لخدمة الويب SOAP الفعلية.
  2. يتم بعد ذلك تمرير رمز الأمان إلى عميل خدمة الويب.
  3. ثم يقوم عميل خدمة الويب باستدعاء خدمة الويب، ولكن هذه المرة مع التأكد من تضمين رمز الأمان في رسالة SOAP.
  4. تفهم خدمة الويب بعد ذلك رسالة SOAP التي تحتوي على رمز المصادقة المميز ويمكنها بعد ذلك الاتصال بخدمة رمز الأمان لمعرفة ما إذا كان رمز الأمان أصليًا أم لا.

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

<xs:element name="UsernameToken">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="Username"/>
         <xs:element ref="Password" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="Id" type="xs:ID"/>
   </xs:complexType>
</xs:element>

عند تبادل رسالة SOAP بين العميل والخادم، قد يبدو الجزء الذي يحتوي على بيانات اعتماد المستخدم كما هو موضح أعلاه. اسم عنصر wsse هو اسم عنصر خاص مُعرَّف لبروتوكول SOAP، ويعني أنه يحتوي على معلومات أمنية.

كيفية بناء خدمات ويب آمنة

والآن، دعونا نلقي نظرة على مثال لأمان خدمة ويب SOAP. سنبني أمان خدمة الويب على المثال الذي تم عرضه سابقًا في فصل SOAP، وسنضيف طبقة أمان إليه.

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

الخطوة 1) الخطوة الأولى هي إنشاء فارغة أسب.نت تطبيق ويب. من Visual Studio 2013، انقر فوق خيار القائمة ملف-> مشروع جديد.

مشروع جديد لبناء خدمات ويب آمنة

بمجرد النقر على خيار مشروع جديد، سيمنحك Visual Studio مربع حوار آخر لاختيار نوع المشروع وإعطاء التفاصيل اللازمة للمشروع. سيتم شرح ذلك في الخطوة التالية.

الخطوة 2) في هذه الخطوة،

  1. تأكد من اختيارك أولاً C# قالب ويب لتطبيق ASP.NET. يجب أن يكون المشروع من هذا النوع لإنشاء مشروع خدمات ويب. باختيار هذا الخيار، سيقوم Visual Studio بتنفيذ الخطوات اللازمة لإضافة الملفات المطلوبة لأي تطبيق ويب.
  2. أعط اسمًا لمشروعك والذي تم إعطاؤه في حالتنا كـ "webservice.asmxثم تأكد من تحديد موقع تخزين ملفات المشروع.

تفاصيل مشروع بناء خدمات ويب آمنة

بمجرد الانتهاء، سترى ملف المشروع الذي تم إنشاؤه في مستكشف الحلول في Visual Studio 2013.

مستكشف حلول بناء خدمات الويب الآمنة

الخطوة 3) في هذه الخطوة، سنضيف ملف خدمة ويب إلى مشروعنا.

  1. أولاً، انقر بزر الماوس الأيمن على ملف المشروع كما هو موضح أدناه.

إنشاء خدمات ويب آمنة (انقر بزر الماوس الأيمن على المشروع)

  1. بمجرد النقر بزر الفأرة الأيمن على ملف المشروع، يمكنك اختيار خيار "إضافة -> خدمة ويب (ASMX)" لإضافة ملف خدمة ويب. ما عليك سوى إدخال اسم "خدمة تعليمية" في خانة اسم ملف خدمة الويب.

إنشاء خدمات ويب آمنة، إضافة خدمة ويب

ستؤدي الخطوة السابقة إلى ظهور مربع حوار، حيث يمكنك إدخال اسم ملف خدمة الويب. لذا، في مربع الحوار أدناه، أدخل اسم TutorialService كاسم للملف.

إنشاء مربع حوار اسم خدمات الويب الآمنة

الخطوة 4) أضف الكود التالي إلى ملف asmx الخاص بخدمة البرنامج التعليمي. يُستخدم مقتطف الكود أدناه لإضافة فئة مخصصة سيتم استخدامها لتغيير رأس SOAP عند إنشاء رسالة SOAP. نظرًا لأننا نريد الآن إضافة بيانات اعتماد الأمان إلى رأس SOAP، فإن هذه الخطوة مطلوبة.

إنشاء رمز رأس المصادقة لخدمات الويب الآمنة

      return "This is a Guru99 Web Service";
   }

   public class AuthHeader : SoapHeader
   {
      public string UserName;
      public string Password;
   }
}

Code التفسير:

  1. نقوم الآن بإنشاء فئة منفصلة تسمى AuthHeader وهو من النوع فئة رأس الصابونعند الرغبة في تغيير البيانات المُمرَّرة في رأس SOAP، يلزم إنشاء فئة تستخدم فئة SoapHeader المدمجة في .NET. من خلال تخصيص رأس SOAP، أصبح بإمكاننا الآن تمرير اسم المستخدم وكلمة المرور عند استدعاء خدمة الويب.
  2. نقوم بعد ذلك بتعريف متغيرات "اسم المستخدم" و"كلمة المرور" والتي تكون من النوع سلسلة. سيتم استخدامها للاحتفاظ بقيم اسم المستخدم وكلمة المرور التي يتم تمريرها إلى خدمة الويب.

الخطوة 5) كخطوة تالية، يجب إضافة الكود التالي إلى نفس الملف ملف TutorialService.asmxيُعرّف هذا الكود وظيفة خدمة الويب الخاصة بنا. تُعيد هذه الوظيفة سلسلة نصية "This is a Guruسيتم إرسال "خدمة الويب 99" إلى العميل. ولكن هذه المرة، لن يتم إرجاع السلسلة إلا إذا قام تطبيق العميل بتمرير بيانات الاعتماد إلى خدمة الويب.

برنامج تعليمي لبناء خدمات ويب آمنة - رمز الخدمة

public class TutorialService : System.Web.Services.WebService
{
   public AuthHeader Credentials;

   [SoapHeader("Credentials")]

   [WebMethod]
   public string Guru99WebService()
   {

      if (Credentials.UserName.ToLower() != "Guru99" ||
      Credentials.Password.ToLower() != "Guru99Password")
      {
         throw new SoapException("Unauthorized",
         SoapException.ClientFaultCode);
      }
      else
      return "This is a Guru99 Web service";
   }

Code التفسير:

  1. نقوم هنا بإنشاء كائن من فئة AuthHeader الذي تم إنشاؤه في الخطوة السابقة. سيتم تمرير هذا الكائن إلى موقعنا Guru99 خدمة ويب حيث يمكن فحص اسم المستخدم وكلمة المرور عن كثب.
  2. يتم الآن استخدام السمة [SoapHeader] لتحديد أنه عند استدعاء خدمة الويب، فإنها تحتاج إلى تمرير اسم المستخدم وكلمة المرور.
  3. في هذا الجزء من الكود، نقوم فعليًا بفحص اسم المستخدم وكلمة المرور المُمرَّرين عند استدعاء خدمة الويب. إذا كان اسم المستخدم يساوي "Guru99" وكلمة المرور تساوي "Guru"99Password"، ثم رسالة "هذا Guruيتم تمرير "خدمة الويب 99" إلى العميل. وإلا، سيتم إرسال خطأ إلى العميل في حالة تمرير اسم المستخدم وكلمة المرور الخاطئين.

إذا تم تنفيذ الكود بنجاح، سيتم عرض الإخراج التالي عند تشغيل الكود في المتصفح.

الإخراج:

إنشاء مخرجات خدمات ويب آمنة

يظهر الناتج أعلاه عند تشغيل البرنامج، مما يعني أن خدمة الويب متاحة الآن. لنضغط على الخدمة. Descriptرابط ايون.

وصف خدمة Build Secure Web Services

من وصف الخدمة، ستتمكن الآن من معرفة أن اسم المستخدم وكلمة المرور هما عنصران في الخدمة wsdl ملف. يجب إرسال هذه المعلمات عند استدعاء خدمة الويب.

أفضل الممارسات لأمن خدمات الويب

فيما يلي الاعتبارات الأمنية التي يجب مراعاتها عند العمل مع خدمات الويب:

  1. التدقيق وإدارة السجلات استخدم تسجيل التطبيقات لتسجيل جميع الطلبات الواردة إلى خدمات الويب. يوفر هذا تقريرًا مفصلاً عن الجهة التي استدعت خدمة الويب، ويمكن أن يساعد في تحليل الأثر في حال حدوث أي خرق أمني.
  2. تدفق المكالمات إلى خدمة الويب حاول ملاحظة مسار المكالمات في خدمات الويب. افتراضيًا، يمكن للتطبيق استدعاء عدة طلبات لخدمات الويب مع تمرير رموز المصادقة بين هذه الخدمات. يجب مراقبة جميع المكالمات بين خدمات الويب وتسجيلها.
  3. معلومات حساسة - تجنب تضمين أي معلومات حساسة في سجلاتك، مثل كلمات المرور أو أرقام بطاقات الائتمان أو أي معلومات سرية أخرى. في حال وجود أي من هذه المعلومات في سجل الأحداث، يجب حذفها قبل تسجيل الدخول.
  4. Tracأعمال كي Operaستعقد - Tracعمليات تجارية هامة. على سبيل المثال، قم بتجهيز تطبيقك لتسجيل الوصول إلى الأساليب الحساسة ومنطق الأعمال. خذ مثالاً على متجر إلكترونيping التطبيق. يتضمن التطبيق النموذجي عدة خطوات، مثل اختيار المنتجات المراد شراؤها، وإضافة المنتجات إلى سلة التسوق، ثم إتمام عملية الشراء. يجب أن تكون عملية سير العمل هذه بأكملها واضحة. tracتم إنشاؤه بواسطة خدمة الويب.
  5. المصادقة الصحيحة المصادقة هي الآلية التي تمكّن العملاء من إثبات هويتهم لدى خدمة الويب باستخدام بيانات اعتماد محددة. لا ينبغي تخزين بيانات اعتماد المستخدم مطلقًا، لذا، عند استخدام WS Security لاستدعاء خدمة الويب، يجب على خدمة الويب عدم تخزين بيانات الاعتماد المُرسلة في ترويسة SOAP، بل يجب حذفها.

الأسئلة الشائعة

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

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

يقوم بروتوكول HTTPS بتشفير الاتصال بين نقطتين، لذا تصبح البيانات مكشوفة بمجرد وصولها إلى خادم وسيط. أما بروتوكول WS-Security فيؤمّن رسالة SOAP نفسها، ويحفظهاping لقد وفرت الحماية من البداية إلى النهاية حتى عند مرورها عبر خوادم متعددة.

رمز اسم المستخدم هو عنصر من عناصر أمان خدمات الويب (WS-Security) يُوضع في رأس طلب SOAP، ويحتوي على اسم المستخدم، وكلمة المرور اختيارياً. يسمح هذا الرمز لخدمة الويب بالتحقق من هوية المُستدعي قبل معالجة الطلب.

تلخيص هذه التدوينة بـ: