Güvenlik Çerçevesi: Oturum Yönetimi

Ürün/Hizmet Makale
Microsoft Entra ID
IoT Cihazı
Azure Belge VERITABANı
ADFS
Kimlik Sunucusu
Web Uygulaması
Web API'si

Microsoft Entra Id kullanırken MSAL yöntemlerini kullanarak uygun oturumu kapatmayı uygulama

Başlık Ayrıntılar
Bileşen Microsoft Entra Kimlik
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Web uygulamanızın Microsoft kimlik platformu kullanarak kullanıcıların oturum açmasını sağlama
Adımlar ASP.NET Core OpenIdConnect ara yazılımı, uygulamanızın adlı bir OpenIdConnect olayı sağlayarak Microsoft kimlik platformu oturumu kapatma uç noktasına yapılan çağrıyı kesmesini sağlarOnRedirectToIdentityProviderForSignOut

Örnek

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

Oluşturulan SaS belirteçleri için sonlu yaşam sürelerini kullanma

Başlık Ayrıntılar
Bileşen IoT Cihazı
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar Azure IoT Hub'da kimlik doğrulaması için oluşturulan SaS belirteçlerinin sonlu bir süre sonu olmalıdır. Belirteçlerin güvenliğinin aşılması durumunda yeniden yürütülebilecekleri süreyi sınırlamak için SaS belirteci yaşam sürelerini en düşük düzeyde tutun.

Oluşturulan Kaynak belirteçleri için en düşük belirteç ömrü kullanma

Başlık Ayrıntılar
Bileşen Azure Belge VERITABANı
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar Kaynak belirtecinin zaman aralığını gereken en düşük değere düşürün. Kaynak belirteçlerinin varsayılan geçerli zaman aralığı 1 saattir.

ADFS kullanırken WsFederation yöntemlerini kullanarak düzgün oturumu kapatma

Başlık Ayrıntılar
Bileşen ADFS
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar Uygulama ADFS tarafından verilen STS belirtecini kullanıyorsa, oturumu kapatma olay işleyicisi kullanıcının oturumunu kapatması için WSFederationAuthenticationModule.FederatedSignOut() yöntemini çağırmalıdır. Ayrıca geçerli oturum yok edilmeli ve oturum belirteci değeri sıfırlanmalı ve sıfırlanmalıdır.

Örnek

        [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);
        }

Kimlik Sunucusu'nu kullanırken uygun oturumu kapatmayı uygulama

Başlık Ayrıntılar
Bileşen Kimlik Sunucusu
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar IdentityServer, dış kimlik sağlayıcılarıyla federasyon özelliğini destekler. Bir kullanıcı, kullanılan protokole bağlı olarak bir yukarı akış kimlik sağlayıcısının oturumunu kapattığında, kullanıcı oturumu kapattığında bildirim almak mümkün olabilir. IdentityServer'ın istemcilerini bilgilendirerek kullanıcının oturumunu kapatabilmesini sağlar. Uygulama ayrıntıları için başvurular bölümündeki belgelere bakın.

HTTPS üzerinden kullanılabilen uygulamalar güvenli tanımlama bilgileri kullanmalıdır

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler EnvironmentType - Şirket İçi
Başvurular httpCookies Öğesi (ASP.NET Ayarlar Şeması), HttpCookie.Secure Özelliği
Adımlar Tanımlama bilgileri normalde yalnızca kapsamı belirlenmiş olan etki alanı tarafından erişilebilir. Ne yazık ki, "etki alanı" tanımı protokolü içermez, bu nedenle HTTPS üzerinden oluşturulan tanımlama bilgilerine HTTP üzerinden erişilebilir. "Secure" özniteliği tarayıcıya tanımlama bilgisinin yalnızca HTTPS üzerinden kullanılabilir hale getirilmemesi gerektiğini belirtir. HTTPS üzerinden ayarlanan tüm tanımlama bilgilerinin güvenli özniteliğini kullandığından emin olun. Gereksinim, requireSSL özniteliği true olarak ayarlanarak web.config dosyasında zorunlu kılınabilir. Ek kod değişiklikleri yapmaya gerek kalmadan tüm geçerli ve gelecekteki tanımlama bilgileri için güvenli özniteliği zorunlu kılacağından tercih edilen yaklaşımdır.

Örnek

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

Uygulamaya erişmek için HTTP kullanılıp kullanılmasa bile bu ayar uygulanır. Uygulamaya erişmek için HTTP kullanılıyorsa, tanımlama bilgileri güvenli öznitelikle ayarlandığından ve tarayıcı bunları uygulamaya geri göndermediğinden bu ayar uygulamayı bozar.

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Web Formları, MVC5
Öznitelikler EnvironmentType - Şirket İçi
Başvurular Yok
Adımlar Web uygulaması Bağlı Taraf olduğunda ve IdP ADFS sunucusu olduğunda, web.config bölümünde RequireSSL değerini True system.identityModel.services olarak ayarlayarak FedAuth belirtecinin güvenli özniteliği yapılandırılabilir:

Örnek

  <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>
Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Güvenli Tanımlama Bilgisi Özniteliği
Adımlar Siteler arası betik (XSS) saldırısıyla bilgilerin açığa çıkması riskini azaltmak için tanımlama bilgilerine yeni bir öznitelik (httpOnly) sunulmuştur ve tüm ana tarayıcılar tarafından desteklenir. özniteliği, bir tanımlama bilgisinin betik aracılığıyla erişilmediğini belirtir. HttpOnly tanımlama bilgilerini kullanan bir web uygulaması, tanımlama bilgisinde yer alan hassas bilgilerin betik aracılığıyla çalınıp saldırganın web sitesine gönderilme olasılığını azaltır.

Örnek

Tanımlama bilgilerini kullanan tüm HTTP tabanlı uygulamalar, web.config dosyasında aşağıdaki yapılandırmayı uygulayarak tanımlama bilgisi tanımında HttpOnly belirtmelidir:

<system.web>
.
.
   <httpCookies requireSSL="false" httpOnlyCookies="true"/>
.
.
</system.web>
Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Web Formları
Öznitelikler Yok
Başvurular FormsAuthentication.RequiresSL Özelliği
Adımlar RequireSSL özellik değeri, yapılandırma öğesinin requireSSL özniteliği kullanılarak bir ASP.NET uygulamasının yapılandırma dosyasında ayarlanır. ASP.NET uygulamanızın Web.config dosyasında, daha önce SSL (Güvenli Yuva Katmanı) olarak bilinen Aktarım Katmanı Güvenliği'nin (TLS) requireSL özniteliğini ayarlayarak forms-authentication tanımlama bilgisini sunucuya döndürmek için gerekli olup olmadığını belirtebilirsiniz.

Örnek

Aşağıdaki kod örneği, Web.config dosyasında requireSSL özniteliğini ayarlar.

<authentication mode="Forms">
  <forms loginUrl="member_login.aspx" cookieless="UseCookies" requireSSL="true"/>
</authentication>
Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler MVC5 (İngilizce)
Öznitelikler EnvironmentType - Şirket İçi
Başvurular Windows Identity Foundation (WIF) Yapılandırması – Bölüm II
Adımlar FedAuth tanımlama bilgileri için httpOnly özniteliğini ayarlamak için hideFromScript öznitelik değeri True olarak ayarlanmalıdır.

Örnek

Aşağıdaki yapılandırma doğru yapılandırmayı gösterir:

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

ASP.NET web sayfalarında Siteler Arası İstek Sahteciliği (CSRF) saldırılarına karşı azaltma

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar Siteler arası istek sahteciliği (CSRF veya XSRF), bir saldırganın bir web sitesinde farklı bir kullanıcının oluşturduğu oturumun güvenlik bağlamında eylemler gerçekleştirebildiği bir saldırı türüdür. Hedeflenen web sitesi yalnızca alınan isteğin kimliğini doğrulamak için oturum tanımlama bilgilerine bağlıysa, amaç içeriği değiştirmek veya silmektir. Saldırgan, farklı bir kullanıcının tarayıcısının, kullanıcının zaten oturum açmış olduğu güvenlik açığı olan bir siteden bir komutla URL yüklemesini sağlayarak bu güvenlik açığından yararlanabilir. Bir saldırganın bunu yapmanın birçok yolu vardır; örneğin, güvenlik açığı olan sunucudan kaynak yükleyen farklı bir web sitesi barındırmak veya kullanıcının bir bağlantıya tıklamasını sağlamak. Sunucu istemciye ek bir belirteç gönderirse, istemcinin bu belirteci gelecekteki tüm isteklere dahil etmesini gerektirirse ve gelecekteki tüm isteklerin, ASP.NET AntiForgeryToken veya ViewState kullanarak geçerli oturumla ilgili bir belirteç içerdiğini doğrularsa saldırı önlenebilir.
Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler MVC5, MVC6
Öznitelikler Yok
Başvurular ASP.NET MVC ve Web Sayfalarında XSRF/CSRF Önleme
Adımlar CSRF'yi önleme ve MVC formlarını ASP.NET - Görünümler'de yardımcı yöntemini kullanın AntiForgeryToken ; forma bir Html.AntiForgeryToken() ekleyin, örneğin,

Örnek

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

Örnek

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

Örnek

Aynı zamanda, Html.AntiForgeryToken() ziyaretçiye yukarıda gösterilen rastgele gizli değerle aynı değere sahip __RequestVerificationToken adlı bir tanımlama bilgisi verir. Ardından, gelen form gönderisini doğrulamak için [ValidateAntiForgeryToken] filtresini hedef eylem yöntemine ekleyin. Örneğin:

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

Bunu denetleen yetkilendirme filtresi:

  • Gelen istekte __RequestVerificationToken adlı bir tanımlama bilgisi var
  • Gelen isteğin __RequestVerificationToken adlı bir Request.Form girdisi var
  • Bu tanımlama bilgisi ve Request.Form değerler eşleşiyor Tümünün iyi olduğunu varsayarsak istek normal şekilde ilerler. Ancak sağlanmadıysa, "Gerekli bir sahteciliğe karşı koruma belirteci sağlanmadı veya geçersizdi" iletisiyle yetkilendirme hatası oluştu.

Örnek

CSRF ve AJAX Önleme: Form belirteci, AJAX istekleri için sorun olabilir çünkü bir AJAX isteği HTML form verileri değil JSON verileri gönderebilir. Bir çözüm, belirteçleri özel bir HTTP üst bilgisinde göndermektir. Aşağıdaki kod, belirteçleri oluşturmak için Razor söz dizimini kullanır ve ardından belirteçleri bir AJAX isteğine ekler.

<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>

Örnek

İsteği işlerken, istek üst bilgisinden belirteçleri ayıklayın. Ardından belirteçleri doğrulamak için AntiForgery.Validate yöntemini çağırın. Belirteçler geçerli değilse Validate yöntemi bir özel durum oluşturur.

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);
}
Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Web Formları
Öznitelikler Yok
Başvurular Web Saldırılarını Önlemeye yönelik ASP.NET Yerleşik Özelliklerden Yararlanın
Adımlar WebForm tabanlı uygulamalarda CSRF saldırıları, ViewStateUserKey'i her kullanıcı için değişen rastgele bir dizeye ayarlayarak (kullanıcı kimliği veya daha iyisi oturum kimliği) azaltılabilir. Birçok teknik ve sosyal nedenden dolayı oturum kimliği çok daha uygundur çünkü oturum kimliği tahmin edilemez, zaman aşımına uğrar ve kullanıcı başına farklılık gösterir.

Örnek

Tüm sayfalarınızda olması gereken kod şu şekildedir:

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

Etkinlik dışı kullanım ömrü için oturumu ayarlama

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular HttpSessionState.Timeout Özelliği
Adımlar Oturum zaman aşımı, bir kullanıcı bir zaman aralığı boyunca bir web sitesinde herhangi bir eylem gerçekleştirmediğinde oluşan olayı temsil eder (web sunucusu tarafından tanımlanır). Olay, sunucu tarafında kullanıcı oturumunun durumunu 'geçersiz' olarak değiştirin (örneğin "artık kullanılmadı") ve web sunucusuna bunu yok etmelerini (içindeki tüm verileri silme) talimatı verir. Aşağıdaki kod örneği, Web.config dosyasında zaman aşımı oturumu özniteliğini 15 dakikaya ayarlar.

Örnek

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

Azure SQL'de Tehdit algılamayı etkinleştirme

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Web Formları
Öznitelikler Yok
Başvurular Kimlik doğrulaması için Forms öğesi (ASP.NET Ayarlar Şeması)
Adımlar Forms Kimlik Doğrulama Bileti tanımlama bilgisi zaman aşımını 15 dakika olarak ayarlayın

Örnek

<forms  name=".ASPXAUTH" loginUrl="login.aspx"  defaultUrl="default.aspx" protection="All" timeout="15" path="/" requireSSL="true" slidingExpiration="true"/>
</forms>
Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Web Formları, MVC5
Öznitelikler EnvironmentType - Şirket İçi
Başvurular Asseka
Adımlar Web uygulaması Bağlı Taraf ve ADFS STS olduğunda, kimlik doğrulama tanımlama bilgilerinin ömrü (FedAuth belirteçleri) web.config dosyasında aşağıdaki yapılandırmayla ayarlanabilir:

Örnek

  <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>

Örnek

Ayrıca ADFS tarafından verilen SAML talep belirtecinin ömrü, ADFS sunucusunda aşağıdaki powershell komutu yürütülerek 15 dakikaya ayarlanmalıdır:

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

Uygulamadan doğru oturumu kapatmayı uygulama

Başlık Ayrıntılar
Bileşen Web Uygulaması
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar Kullanıcı oturumu kapat düğmesine bastığında uygulamadan doğru Oturumu Kapat'ı gerçekleştirin. Oturumu kapattıktan sonra uygulama kullanıcının oturumlarını yok etmeli, ayrıca oturum tanımlama bilgisi değerini sıfırlamalı ve null yapmalı, ayrıca kimlik doğrulama tanımlama bilgisi değerini sıfırlamalı ve boş değere atmalıdır. Ayrıca, birden çok oturum tek bir kullanıcı kimliğine bağlı olduğunda, zaman aşımı veya oturum kapatma sırasında sunucu tarafında toplu olarak sonlandırılmalıdır. Son olarak, Oturumu kapatma işlevinin her sayfada kullanılabilir olduğundan emin olun.

ASP.NET Web API'lerinde Siteler Arası İstek Sahteciliği (CSRF) saldırılarına karşı azaltma

Başlık Ayrıntılar
Bileşen Web API'si
SDL Aşaması Derleme
Geçerli Teknolojiler Genel
Öznitelikler Yok
Başvurular Yok
Adımlar Siteler arası istek sahteciliği (CSRF veya XSRF), bir saldırganın bir web sitesinde farklı bir kullanıcının oluşturduğu oturumun güvenlik bağlamında eylemler gerçekleştirebildiği bir saldırı türüdür. Hedeflenen web sitesi yalnızca alınan isteğin kimliğini doğrulamak için oturum tanımlama bilgilerine bağlıysa, amaç içeriği değiştirmek veya silmektir. Saldırgan, farklı bir kullanıcının tarayıcısının, kullanıcının zaten oturum açmış olduğu güvenlik açığı olan bir siteden bir komutla URL yüklemesini sağlayarak bu güvenlik açığından yararlanabilir. Bir saldırganın bunu yapmanın birçok yolu vardır; örneğin, güvenlik açığı olan sunucudan kaynak yükleyen farklı bir web sitesi barındırmak veya kullanıcının bir bağlantıya tıklamasını sağlamak. Sunucu istemciye ek bir belirteç gönderirse, istemcinin bu belirteci gelecekteki tüm isteklere dahil etmesini gerektirirse ve gelecekteki tüm isteklerin, ASP.NET AntiForgeryToken veya ViewState kullanarak geçerli oturumla ilgili bir belirteç içerdiğini doğrularsa saldırı önlenebilir.
Başlık Ayrıntılar
Bileşen Web API'si
SDL Aşaması Derleme
Geçerli Teknolojiler MVC5, MVC6
Öznitelikler Yok
Başvurular ASP.NET Web API'sinde Siteler Arası İstek Sahteciliği (CSRF) Saldırılarını Önleme
Adımlar CSRF ve AJAX Önleme: Form belirteci, AJAX istekleri için sorun olabilir çünkü bir AJAX isteği HTML form verileri değil JSON verileri gönderebilir. Bir çözüm, belirteçleri özel bir HTTP üst bilgisinde göndermektir. Aşağıdaki kod, belirteçleri oluşturmak için Razor söz dizimini kullanır ve ardından belirteçleri bir AJAX isteğine ekler.

Örnek

<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>

Örnek

İsteği işlerken, istek üst bilgisinden belirteçleri ayıklayın. Ardından belirteçleri doğrulamak için AntiForgery.Validate yöntemini çağırın. Belirteçler geçerli değilse Validate yöntemi bir özel durum oluşturur.

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);
}

Örnek

CSRF'yi önleme ve MVC formlarını ASP.NET - Görünümlerde AntiForgeryToken yardımcı yöntemini kullanın; forma bir Html.AntiForgeryToken() koyun, örneğin,

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

Örnek

Yukarıdaki örnek aşağıdakine benzer bir çıkış oluşturur:

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

Örnek

Aynı zamanda, Html.AntiForgeryToken() ziyaretçiye yukarıda gösterilen rastgele gizli değerle aynı değere sahip __RequestVerificationToken adlı bir tanımlama bilgisi verir. Ardından, gelen form gönderisini doğrulamak için [ValidateAntiForgeryToken] filtresini hedef eylem yöntemine ekleyin. Örneğin:

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

Bunu denetleen yetkilendirme filtresi:

  • Gelen istekte __RequestVerificationToken adlı bir tanımlama bilgisi var
  • Gelen isteğin __RequestVerificationToken adlı bir Request.Form girdisi var
  • Bu tanımlama bilgisi ve Request.Form değerler eşleşiyor Tümünün iyi olduğunu varsayarsak istek normal şekilde ilerler. Ancak sağlanmadıysa, "Gerekli bir sahteciliğe karşı koruma belirteci sağlanmadı veya geçersizdi" iletisiyle yetkilendirme hatası oluştu.
Başlık Ayrıntılar
Bileşen Web API'si
SDL Aşaması Derleme
Geçerli Teknolojiler MVC5, MVC6
Öznitelikler Kimlik Sağlayıcısı - ADFS, Kimlik Sağlayıcısı - Microsoft Entra Id
Başvurular ASP.NET Web API 2.2'de Tek Tek Hesaplar ve Yerel Oturum Açma ile Web API'lerinin güvenliğini sağlama
Adımlar Web API'sinin güvenliği OAuth 2.0 kullanılarak sağlanıyorsa, Yetkilendirme isteği üst bilgisinde bir taşıyıcı belirteci bekler ve yalnızca belirteç geçerli olduğunda isteğe erişim verir. Tanımlama bilgisi tabanlı kimlik doğrulamasından farklı olarak tarayıcılar taşıyıcı belirteçleri isteklere eklemez. İstekte bulunan istemcinin istek üst bilgisine taşıyıcı belirtecini açıkça eklemesi gerekir. Bu nedenle, OAuth 2.0 kullanılarak korunan ASP.NET Web API'leri için taşıyıcı belirteçler CSRF saldırılarına karşı bir savunma olarak kabul edilir. Uygulamanın MVC bölümünde form kimlik doğrulaması kullanılıyorsa (ör. tanımlama bilgileri kullanılıyorsa), sahteciliğe karşı koruma belirteçlerinin MVC web uygulaması tarafından kullanılması gerektiğini lütfen unutmayın.

Örnek

Web API'sinin tanımlama bilgilerine değil YALNIZCA taşıyıcı belirteçlere güvenmesi konusunda bilgilendirilmesi gerekir. Yönteminde aşağıdaki yapılandırmayla WebApiConfig.Register yapılabilir:

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

SuppressDefaultHostAuthentication yöntemi, Web API'sine istek Web API'si işlem hattına ulaşmadan önce iis veya OWIN ara yazılımı tarafından gerçekleşen kimlik doğrulamalarını yoksayması gerektiğini bildirir. Bu şekilde Web API'sini yalnızca taşıyıcı belirteçleri kullanarak kimlik doğrulamasıyla kısıtlayabiliriz.