إطار الأمان: إدارة الجلسة

المنتج /الخدمة مقال
معرف Microsoft Entra
جهاز إنترنت الأشياء
Azure Document DB
Adfs
Identity Server
تطبيق ويب
واجهة برمجة تطبيقات الويب

تنفيذ تسجيل الخروج المناسب باستخدام أساليب MSAL عند استخدام معرف Microsoft Entra

‏‫العنوان التفاصيل
المكون Microsoft Entra ID
مرحلة SDL بناء
التقنيات المعمول بها العام
السمات غير متاح
المراجع تمكين تطبيق الويب لتسجيل دخول المستخدمين باستخدام النظام الأساسي للهويات في Microsoft
الخطوات يمكن البرنامج الوسيط ASP.NET Core OpenId الاتصال تطبيقك من اعتراض الاستدعاء إلى نقطة نهاية تسجيل الخروج النظام الأساسي للهويات في Microsoft عن طريق توفير حدث OpenId الاتصال المسمىOnRedirectToIdentityProviderForSignOut

مثال

services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
    options.Events.OnRedirectToIdentityProviderForSignOut = async context =>
    {
        //Your logic here
    };
});

استخدام مدة البقاء المحدودة الرموز المميزة لـ SaS التي تم إنشاؤها

‏‫العنوان التفاصيل
المكون جهاز IoT
مرحلة SDL بناء
التقنيات المعمول بها العام
السمات غير متاح
المراجع غير متاح
الخطوات يجب أن يكون لرموز SaS التي تم إنشاؤها للمصادقة على Azure IoT Hub فترة انتهاء صلاحية محدودة. حافظ على عمر رمزية SaS إلى الحد الأدنى للحد من مقدار الوقت الذي يمكن إعادة تشغيله في حالة اختراق الرموز المميزة.

استخدام الحد الأدنى لعمر الرمز المميز للرمز المميزة للمورد الذي تم إنشاؤه

‏‫العنوان التفاصيل
المكون Azure Cosmos DB
مرحلة SDL بناء
التقنيات المعمول بها العام
السمات غير متاح
المراجع غير متاح
الخطوات تقليل الفترة الزمنية للرمز المميز للمورد إلى الحد الأدنى للقيمة المطلوبة. تحتوي الرموز المميزة للموارد على فترة زمنية صالحة افتراضية تبلغ ساعة واحدة.

تنفيذ تسجيل الخروج المناسب باستخدام أساليب WsFederation عند استخدام ADFS

‏‫العنوان التفاصيل
المكون ADFS
مرحلة SDL بناء
التقنيات المعمول بها العام
السمات غير متاح
المراجع غير متاح
الخطوات إذا كان التطبيق يعتمد على رمز STS الذي تم إصداره بواسطة ADFS، فيجب على معالج حدث تسجيل الخروج استدعاء أسلوب WSFederationAuthenticationModule.FederatedSignOut () لتسجيل خروج المستخدم. يجب أيضاً إتلاف جلسة العمل الحالية، ويجب إعادة تعيين قيمة الرمز المميز للجلسة وإبطالها.

مثال

        [HttpPost, ValidateAntiForgeryToken]
        [Authorization]
        public ActionResult SignOut(string redirectUrl)
        {
            if (!this.User.Identity.IsAuthenticated)
            {
                return this.View("LogOff", null);
            }

            // Removes the user profile.
            this.Session.Clear();
            this.Session.Abandon();
            HttpContext.Current.Response.Cookies.Add(new System.Web.HttpCookie("ASP.NET_SessionId", string.Empty)
                {
                    Expires = DateTime.Now.AddDays(-1D),
                    Secure = true,
                    HttpOnly = true
                });

            // Signs out at the specified security token service (STS) by using the WS-Federation protocol.
            Uri signOutUrl = new Uri(FederatedAuthentication.WSFederationAuthenticationModule.Issuer);
            Uri replyUrl = new Uri(FederatedAuthentication.WSFederationAuthenticationModule.Realm);
            if (!string.IsNullOrEmpty(redirectUrl))
            {
                replyUrl = new Uri(FederatedAuthentication.WSFederationAuthenticationModule.Realm + redirectUrl);
            }
           //     Signs out of the current session and raises the appropriate events.
            var authModule = FederatedAuthentication.WSFederationAuthenticationModule;
            authModule.SignOut(false);
        //     Signs out at the specified security token service (STS) by using the WS-Federation
        //     protocol.            
            WSFederationAuthenticationModule.FederatedSignOut(signOutUrl, replyUrl);
            return new RedirectResult(redirectUrl);
        }

تنفيذ تسجيل الخروج المناسب عند استخدام Identity Server

‏‫العنوان التفاصيل
المكون خادم الهوية
مرحلة SDL بناء
التقنيات المعمول بها العام
السمات غير متاح
المراجع تسجيل الخروج من IdentityServer3-Federated
الخطوات يدعم IdentityServer القدرة على الاتحاد مع موفري الهوية الخارجيين. عندما يسجّل المستخدم خروجه من موفر هوية أولية، اعتماداً على البروتوكول المستخدم، قد يكون من الممكن تلقي إشعار عند تسجيل خروج المستخدم. يسمح لـ IdentityServer بإخطار عملائها حتى يتمكنوا أيضاً من تسجيل خروج المستخدم. تحقق من الوثائق في قسم المراجع للحصول على تفاصيل التنفيذ.

يجب أن تستخدم التطبيقات المتوفرة عبر HTTPS ملفات تعريف الارتباط الآمنة

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL بناء
التقنيات المعمول بها العام
السمات EnvironmentType - OnPrem
المراجع httpCookies Element (مخطط إعدادات ASP.NET)، خاصية HttpCookie.Secure
الخطوات عادةً ما تكون ملفات تعريف الارتباط متاحة فقط للمجال الذي تم تحديد نطاقها من أجله. لسوء الحظ، لا يتضمن تعريف "المجال" البروتوكول لذلك يمكن الوصول إلى ملفات تعريف الارتباط التي يتم إنشاؤها عبر HTTPS عبر HTTP. تشير سمة "آمن" للمتصفح إلى أن ملف تعريف الارتباط يجب أن يكون متاحاً فقط عبر HTTPS. تأكد من أن جميع ملفات تعريف الارتباط التي تم تعيينها عبر HTTPS تستخدم السمة آمن. يمكن فرض المطلب في ملف web.config عن طريق تعيين السمة requireSSL إلى صواب. إنه النهج المفضل لأنه سيفرض السمة آمن لجميع ملفات تعريف الارتباط الحالية والمستقبلية دون الحاجة إلى إجراء أي تغييرات إضافية في التعليمات البرمجية.

مثال

<configuration>
  <system.web>
    <httpCookies requireSSL="true"/>
  </system.web>
</configuration>

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

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL بناء
التقنيات المعمول بها نماذج ويب، MVC5
السمات EnvironmentType - OnPrem
المراجع غير متاح
الخطوات عندما يكون تطبيق الويب هو جهة الاعتماد، ومعرف الهوية هو خادم ADFS، يمكن تكوين السمة الآمنة للرمز المميز FedAuth عن طريق الإعداد يتطلبSSL إلى True في system.identityModel.services قسم من web.config:

مثال

  <system.identityModel.services>
    <federationConfiguration>
      <!-- Set requireSsl=true; domain=application domain name used by FedAuth cookies (Ex: .gdinfra.com); -->
      <cookieHandler requireSsl="true" persistentSessionLifetime="0.0:20:0" />
    ....  
    </federationConfiguration>
  </system.identityModel.services>
‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL بناء
التقنيات المعمول بها العام
السمات غير متاح
المراجع سمة ملف تعريف الارتباط الآمن
الخطوات للتخفيف من مخاطر الكشف عن المعلومات من خلال هجوم البرمجة النصية عبر المواقع (XSS)، تم تقديم سمة جديدة - httpOnly - لملفات تعريف الارتباط وهي مدعومة من قبل جميع المتصفحات الرئيسية. تحدد السمة أنه لا يمكن الوصول إلى ملف تعريف الارتباط من خلال البرنامج النصي. باستخدام ملفات تعريف الارتباط HttpOnly، يقلل تطبيق الويب من احتمالية سرقة المعلومات الحساسة الموجودة في ملف تعريف الارتباط عبر البرنامج النصي وإرسالها إلى موقع الويب الخاص بالمهاجم.

مثال

يجب أن تحدد جميع التطبيقات المستندة إلى HTTP والتي تستخدم ملفات تعريف الارتباط HttpOnly في تعريف ملف تعريف الارتباط، من خلال تنفيذ التكوين التالي في web.config:

<system.web>
.
.
   <httpCookies requireSSL="false" httpOnlyCookies="true"/>
.
.
</system.web>
‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL بناء
التقنيات المعمول بها نماذج الويب
السمات غير متاح
المراجع خاصية FormsAuthentication.RequireSSL
الخطوات يتم تعيين قيمة الخاصية RequireSSL في ملف التكوين لتطبيق ASP.NET باستخدام سمة requiredSSL لعنصر التكوين. يمكنك تحديد في ملف Web.config لتطبيق ASP.NET الخاص بك ما إذا كان Transport Layer Security (TLS)، المعروف سابقاً باسم SSL (طبقة مآخذ التوصيل الآمنة)، مطلوباً لإرجاع ملف تعريف ارتباط مصادقة النماذج إلى الخادم عن طريق تعيين سمة requiredSSL.

مثال

يعين مثال التعليمات البرمجية التالي السمة requireSSL في ملف Web.config.

<authentication mode="Forms">
  <forms loginUrl="member_login.aspx" cookieless="UseCookies" requireSSL="true"/>
</authentication>
‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL بناء
التقنيات المعمول بها MVC5
السمات EnvironmentType - OnPrem
المراجع تكوين Windows Identity Foundation (WIF) - الجزء الثاني
الخطوات لتعيين سمة httpOnly لملفات تعريف ارتباط FedAuth، يجب تعيين قيمة سمة hideFromCsript على True.

مثال

يظهر التكوين التالي التكوين الصحيح:

<federatedAuthentication>
<cookieHandler mode="Custom"
                       hideFromScript="true"
                       name="FedAuth"
                       path="/"
                       requireSsl="true"
                       persistentSessionLifetime="25">
</cookieHandler>
</federatedAuthentication>

التخفيف من هجمات تزييف الطلبات عبر المواقع (CSRF) على صفحات الويب ASP.NET

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL بناء
التقنيات المعمول بها العام
السمات غير متاح
المراجع غير متاح
الخطوات تزييف طلب المواقع المشتركة (CSRF أو XSRF) هو نوع من الهجوم يمكن للمهاجم فيه تنفيذ إجراءات في سياق الأمان لجلسة مستخدم مختلفة على موقع ويب. الهدف هو تعديل أو حذف المحتوى، إذا كان الموقع المستهدف يعتمد حصرياً على ملفات تعريف الارتباط الخاصة بالجلسة لمصادقة الطلب المستلم. يمكن للمهاجم استغلال مشكلة عدم الحصانة هذه عن طريق الحصول على مستعرض مستخدم مختلف لتحميل عنوان URL بأمر من موقع ضعيف قام المستخدم بتسجيل الدخول إليه بالفعل. هناك العديد من الطرق التي يمكن للمهاجم القيام بذلك، مثل استضافة موقع ويب مختلف يقوم بتحميل مورد من الخادم الضعيف، أو جعل المستخدم ينقر فوق ارتباط. يمكن منع الهجوم إذا كان الخادم يرسل رمز مميز إضافي إلى العميل، يتطلب العميل لتضمين هذا الرمز المميز في كافة الطلبات المستقبلية، ويتحقق من أن كافة الطلبات المستقبلية تتضمن رمز مميز يتعلق بجلسة العمل الحالية، مثل باستخدام antiForgeryToken أو ViewState ASP.NET.
‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL بناء
التقنيات المعمول بها MVC5، MVC6
السمات غير متاح
المراجع منع XSRF/CSRF في ASP.NET MVC وصفحات الويب
الخطوات Anti-CSRF ونماذج MVC ASP.NET - استخدم AntiForgeryToken أسلوب المساعد في طرق العرض؛ وضع في Html.AntiForgeryToken() النموذج، على سبيل المثال،

مثال

@using (Html.BeginForm("UserProfile", "SubmitUpdate")) { 
    @Html.ValidationSummary(true) 
    @Html.AntiForgeryToken()
    <fieldset> 

مثال

<form action="/UserProfile/SubmitUpdate" method="post">
    <input name="__RequestVerificationToken" type="hidden" value="saTFWpkKN0BYazFtN6c4YbZAmsEwG0srqlUqqloi/fVgeV2ciIFVmelvzwRZpArs" />
    <!-- rest of form goes here -->
</form>

مثال

في الوقت نفسه، يمنح Html.AntiForgeryToken () للزائر ملف تعريف ارتباط يسمى __RequestVerificationToken، بنفس قيمة القيمة المخفية العشوائية الموضحة أعلاه. بعد ذلك، للتحقق من صحة منشور نموذج واردة، إضافة عامل التصفية [ValidateAntiForgeryToken] إلى أسلوب الإجراء الهدف. على سبيل المثال:

[ValidateAntiForgeryToken]
public ViewResult SubmitUpdate()
{
// ... etc.
}

عامل تصفية التخويل الذي يتحقق من ما يلي:

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

مثال

Anti-CSRF و AJAX: يمكن أن يمثل الرمز المميز للنموذج مشكلة لطلبات AJAX، لأن طلب AJAX قد يرسل بيانات JSON، وليس بيانات نموذج HTML. أحد الحلول هو إرسال الرموز المميزة في عنوان HTTP مخصص. التعليمات البرمجية التالية يستخدم بناء الجملة Razor لإنشاء الرموز المميزة ثم يضيف الرموز المميزة إلى طلب AJAX.

<script>
    @functions{
        public string TokenHeaderValue()
        {
            string cookieToken, formToken;
            AntiForgery.GetTokens(null, out cookieToken, out formToken);
            return cookieToken + ":" + formToken;                
        }
    }

    $.ajax("api/values", {
        type: "post",
        contentType: "application/json",
        data: {  }, // JSON data goes here
        dataType: "json",
        headers: {
            'RequestVerificationToken': '@TokenHeaderValue()'
        }
    });
</script>

مثال

عند معالجة الطلب استخراج الرموز المميزة من عنوان الطلب. ثم قم باستدعاء الأسلوب AntiForgery.Validate للتحقق من صحة الرموز المميزة. يطرح أسلوب التحقق استثناء إذا كانت الرموز المميزة غير صالحة.

void ValidateRequestHeader(HttpRequestMessage request)
{
    string cookieToken = "";
    string formToken = "";

    IEnumerable<string> tokenHeaders;
    if (request.Headers.TryGetValues("RequestVerificationToken", out tokenHeaders))
    {
        string[] tokens = tokenHeaders.First().Split(':');
        if (tokens.Length == 2)
        {
            cookieToken = tokens[0].Trim();
            formToken = tokens[1].Trim();
        }
    }
    AntiForgery.Validate(cookieToken, formToken);
}
‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL بناء
التقنيات المعمول بها نماذج الويب
السمات غير متاح
المراجع الاستفادة من ميزات ASP.NET المضمنة لصد هجمات الويب
الخطوات يمكن التخفيف من هجمات CSRF في التطبيقات المستندة إلى WebForm عن طريق تعيين ViewStateUserKey على سلسلة عشوائية تختلف لكل مستخدم - معرف المستخدم أو، الأفضل من ذلك، معرف الجلسة. ولأسباب فنية واجتماعية، يعد معرف الجلسة مناسبا بشكل أفضل لأن معرف الجلسة لا يمكن التنبؤ به، وينتهى، ويختلف على أساس كل مستخدم.

مثال

إليك الرمز الذي تحتاج إلى الحصول عليه في جميع صفحاتك:

void Page_Init (object sender, EventArgs e) {
   ViewStateUserKey = Session.SessionID;
   :
}

إعداد جلسة العمل لمدى عدم النشاط

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL بناء
التقنيات المعمول بها العام
السمات غير متاح
المراجع خاصية HttpSessionState.Timeout
الخطوات يمثل مهلة جلسة العمل الحدث الذي يحدث عندما لا يقوم المستخدم بتنفيذ أي إجراء على موقع ويب أثناء فاصل زمني (معرف بواسطة خادم ويب). يغير الحدث، على جانب الخادم، حالة جلسة عمل المستخدم إلى "غير صالح" (على سبيل المثال "لم يتم استخدامه بعد الآن") ويوجه خادم الويب لإتلافه (حذف جميع البيانات الموجودة فيه). يعيّن مثال التعليمات البرمجية التالي سمة جلسة المهلة إلى 15 دقيقة في ملف Web.config.

مثال

<configuration>
  <system.web>
    <sessionState mode="InProc" cookieless="true" timeout="15" />
  </system.web>
</configuration>

تمكين الكشف عن التهديدات على Azure SQL

‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL بناء
التقنيات المعمول بها نماذج الويب
السمات غير متاح
المراجع عنصر نماذج للمصادقة (مخطط ASP.NET الإعدادات)
الخطوات اضبط مهلة ملف تعريف ارتباط تذكرة مصادقة النماذج على 15 دقيقة

مثال

<forms  name=".ASPXAUTH" loginUrl="login.aspx"  defaultUrl="default.aspx" protection="All" timeout="15" path="/" requireSSL="true" slidingExpiration="true"/>
</forms>
‏‫العنوان التفاصيل
المكون تطبيق ويب
مرحلة SDL بناء
التقنيات المعمول بها نماذج ويب، MVC5
السمات EnvironmentType - OnPrem
المراجع asdeqa
الخطوات عندما يكون تطبيق الويب Relying Party و ADFS هو STS، يمكن تعيين عمر ملفات تعريف الارتباط للمصادقة - الرموز المميزة FedAuth - من خلال التكوين التالي في web.config:

مثال

  <system.identityModel.services>
    <federationConfiguration>
      <!-- Set requireSsl=true; domain=application domain name used by FedAuth cookies (Ex: .gdinfra.com); -->
      <cookieHandler requireSsl="true" persistentSessionLifetime="0.0:15:0" />
      <!-- Set requireHttps=true; -->
      <wsFederation passiveRedirectEnabled="true" issuer="http://localhost:39529/" realm="https://localhost:44302/" reply="https://localhost:44302/" requireHttps="true"/>
      <!--
      Use the code below to enable encryption-decryption of claims received from ADFS. Thumbprint value varies based on the certificate being used.
      <serviceCertificate>
        <certificateReference findValue="4FBBBA33A1D11A9022A5BF3492FF83320007686A" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
      </serviceCertificate>
      -->
    </federationConfiguration>
  </system.identityModel.services>

مثال

يجب أيضاً تعيين عمر رمز مطالبة SAML الذي أصدره ADFS على 15 دقيقة، عن طريق تنفيذ أمر powerhell التالي على خادم ADFS:

Set-ADFSRelyingPartyTrust -TargetName "<RelyingPartyWebApp>" -ClaimsProviderName @("Active Directory") -TokenLifetime 15 -AlwaysRequireAuthentication $true

تنفيذ تسجيل الخروج المناسب من التطبيق

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

التخفيف من هجمات تزييف الطلبات عبر المواقع (CSRF) على واجهات برمجة تطبيقات الويب ASP.NET

‏‫العنوان التفاصيل
المكون واجهة API للويب
مرحلة SDL بناء
التقنيات المعمول بها العام
السمات غير متاح
المراجع غير متاح
الخطوات تزييف طلب المواقع المشتركة (CSRF أو XSRF) هو نوع من الهجوم يمكن للمهاجم فيه تنفيذ إجراءات في سياق الأمان لجلسة مستخدم مختلفة على موقع ويب. الهدف هو تعديل أو حذف المحتوى، إذا كان الموقع المستهدف يعتمد حصرياً على ملفات تعريف الارتباط الخاصة بالجلسة لمصادقة الطلب المستلم. يمكن للمهاجم استغلال مشكلة عدم الحصانة هذه عن طريق الحصول على مستعرض مستخدم مختلف لتحميل عنوان URL بأمر من موقع ضعيف قام المستخدم بتسجيل الدخول إليه بالفعل. هناك العديد من الطرق التي يمكن للمهاجم القيام بذلك، مثل استضافة موقع ويب مختلف يقوم بتحميل مورد من الخادم الضعيف، أو جعل المستخدم ينقر فوق ارتباط. يمكن منع الهجوم إذا كان الخادم يرسل رمز مميز إضافي إلى العميل، يتطلب العميل لتضمين هذا الرمز المميز في كافة الطلبات المستقبلية، ويتحقق من أن كافة الطلبات المستقبلية تتضمن رمز مميز يتعلق بجلسة العمل الحالية، مثل باستخدام antiForgeryToken أو ViewState ASP.NET.
‏‫العنوان التفاصيل
المكون واجهة API للويب
مرحلة SDL بناء
التقنيات المعمول بها MVC5، MVC6
السمات غير متاح
المراجع منع هجمات تزييف طلبات المواقع المشتركة (CSRF) في واجهات برمجة تطبيقات الويب ASP.NET API
الخطوات Anti-CSRF و AJAX: يمكن أن يمثل الرمز المميز للنموذج مشكلة لطلبات AJAX، لأن طلب AJAX قد يرسل بيانات JSON، وليس بيانات نموذج HTML. أحد الحلول هو إرسال الرموز المميزة في عنوان HTTP مخصص. التعليمات البرمجية التالية يستخدم بناء الجملة Razor لإنشاء الرموز المميزة ثم يضيف الرموز المميزة إلى طلب AJAX.

مثال

<script>
    @functions{
        public string TokenHeaderValue()
        {
            string cookieToken, formToken;
            AntiForgery.GetTokens(null, out cookieToken, out formToken);
            return cookieToken + ":" + formToken;                
        }
    }
    $.ajax("api/values", {
        type: "post",
        contentType: "application/json",
        data: {  }, // JSON data goes here
        dataType: "json",
        headers: {
            'RequestVerificationToken': '@TokenHeaderValue()'
        }
    });
</script>

مثال

عند معالجة الطلب استخراج الرموز المميزة من عنوان الطلب. ثم قم باستدعاء الأسلوب AntiForgery.Validate للتحقق من صحة الرموز المميزة. يطرح أسلوب التحقق استثناء إذا كانت الرموز المميزة غير صالحة.

void ValidateRequestHeader(HttpRequestMessage request)
{
    string cookieToken = "";
    string formToken = "";

    IEnumerable<string> tokenHeaders;
    if (request.Headers.TryGetValues("RequestVerificationToken", out tokenHeaders))
    {
        string[] tokens = tokenHeaders.First().Split(':');
        if (tokens.Length == 2)
        {
            cookieToken = tokens[0].Trim();
            formToken = tokens[1].Trim();
        }
    }
    AntiForgery.Validate(cookieToken, formToken);
}

مثال

نماذج Anti-CSRF و ASP.NET MVC - استخدم الأسلوب المساعد AntiForgeryToken في العروض؛ ضع Html.AntiForgeryToken () في النموذج، على سبيل المثال،

@using (Html.BeginForm("UserProfile", "SubmitUpdate")) { 
    @Html.ValidationSummary(true) 
    @Html.AntiForgeryToken()
    <fieldset> 
}

مثال

سيخرج المثال أعلاه شيئاً مثل ما يلي:

<form action="/UserProfile/SubmitUpdate" method="post">
    <input name="__RequestVerificationToken" type="hidden" value="saTFWpkKN0BYazFtN6c4YbZAmsEwG0srqlUqqloi/fVgeV2ciIFVmelvzwRZpArs" />
    <!-- rest of form goes here -->
</form>

مثال

في الوقت نفسه، يمنح Html.AntiForgeryToken () للزائر ملف تعريف ارتباط يسمى __RequestVerificationToken، بنفس قيمة القيمة المخفية العشوائية الموضحة أعلاه. بعد ذلك، للتحقق من صحة منشور نموذج واردة، إضافة عامل التصفية [ValidateAntiForgeryToken] إلى أسلوب الإجراء الهدف. على سبيل المثال:

[ValidateAntiForgeryToken]
public ViewResult SubmitUpdate()
{
// ... etc.
}

عامل تصفية التخويل الذي يتحقق من ما يلي:

  • يحتوي الطلب الوارد على ملف تعريف ارتباط يسمى __RequestVerificationToken
  • يحتوي الطلب الوارد على Request.Form إدخال يسمى __RequestVerificationToken
  • تتطابق ملفات تعريف الارتباط Request.Form والقيم هذه مع افتراض أن كل شيء على ما يرام، ويمر الطلب كالمعتاد. ولكن إذا لم يكن الأمر صحيحاً، فإن فشل التخويل مع الرسالة "لم يتم توفير رمز مميز مطلوب لمكافحة التزييف أو كان غير صالح".
‏‫العنوان التفاصيل
المكون واجهة API للويب
مرحلة SDL بناء
التقنيات المعمول بها MVC5، MVC6
السمات موفر الهوية - ADFS، موفر الهوية - معرف Microsoft Entra
المراجع تأمين واجهة برمجة تطبيقات الويب مع الحسابات الفردية وتسجيل الدخول المحلي في ASP.NET Web API 2.2
الخطوات إذا كانت واجهة برمجة تطبيقات الويب مؤمنة باستخدام OAuth 2.0، فإنها تتوقع رمزاً لحاملها في رأس طلب التفويض ولا تمنح حق الوصول إلى الطلب إلا إذا كان الرمز المميز صالحاً. على عكس المصادقة القائمة على ملف تعريف الارتباط، لا تقوم المتصفحات بإرفاق الرموز المميزة لحاملها بالطلبات. يحتاج العميل الطالب إلى إرفاق رمز الحامل بشكل صريح في رأس الطلب. لذلك، بالنسبة لواجهات برمجة تطبيقات الويب ASP.NET المحمية باستخدام OAuth 2.0، تعتبر الرموز المميزة لحاملها بمثابة دفاع ضد هجمات CSRF. يرجى ملاحظة أنه إذا كان جزء MVC من التطبيق يستخدم مصادقة النماذج (أي يستخدم ملفات تعريف الارتباط)، فيجب استخدام الرموز المميزة لمكافحة التزوير بواسطة تطبيق الويب MVC.

مثال

يجب إبلاغ واجهة برمجة تطبيقات الويب للاعتماد فقط على الرموز المميزة لحاملها وليس على ملفات تعريف الارتباط. يمكن أن يتم ذلك عن طريق التكوين التالي في WebApiConfig.Register الطريقة:

config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

تقوم طريقة SuppressDefaultHostAuthentication بإخبار Web API بتجاهل أي مصادقة تحدث قبل أن يصل الطلب إلى خط أنابيب Web API، إما عن طريق IIS أو عن طريق OWIN الوسيطة. بهذه الطريقة، يمكننا تقييد واجهة برمجة تطبيقات الويب للمصادقة فقط باستخدام الرموز المميزة لحاملها.