Ramka zabezpieczeń: zarządzanie sesjami

Produkt/usługa Artykuł
Azure AD
Urządzenie IoT
Azure Document DB
ADFS
Serwer tożsamości
Aplikacja internetowa
Interfejs API sieci Web

Implementowanie odpowiedniego wylogowania przy użyciu metod ADAL podczas korzystania z usługi Azure AD

Tytuł Szczegóły
Składnik Azure AD
Faza SDL Kompilacja
Odpowiednie technologie Ogólny
Atrybuty Nie dotyczy
Odwołania Nie dotyczy
Kroki Jeśli aplikacja opiera się na tokenie dostępu wystawionym przez usługę Azure AD, program obsługi zdarzeń wylogowy powinien wywołać

Przykład

HttpContext.GetOwinContext().Authentication.SignOut(OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType)

Przykład

Powinno to również zniszczyć sesję użytkownika przez wywołanie metody Session.Abandon(). Następująca metoda przedstawia bezpieczną implementację wylogowania użytkownika:

    [HttpPost]
        [ValidateAntiForgeryToken]
        public void LogOff()
        {
            string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
            AuthenticationContext authContext = new AuthenticationContext(Authority + TenantId, new NaiveSessionCache(userObjectID));
            authContext.TokenCache.Clear();
            Session.Clear();
            Session.Abandon();
            Response.SetCookie(new HttpCookie("ASP.NET_SessionId", string.Empty));
            HttpContext.GetOwinContext().Authentication.SignOut(
                OpenIdConnectAuthenticationDefaults.AuthenticationType,
                CookieAuthenticationDefaults.AuthenticationType);
        } 

Używanie skończonych okresów istnienia dla wygenerowanych tokenów sas

Tytuł Szczegóły
Składnik Urządzenie IoT
Faza SDL Kompilacja
Odpowiednie technologie Ogólny
Atrybuty Nie dotyczy
Odwołania Nie dotyczy
Kroki Tokeny sas generowane do uwierzytelniania w Azure IoT Hub powinny mieć skończony okres wygaśnięcia. Zachowaj minimalne okresy istnienia tokenu sas, aby ograniczyć czas, przez który można je odtworzyć w przypadku naruszenia zabezpieczeń tokenów.

Używanie minimalnych okresów istnienia tokenów dla wygenerowanych tokenów zasobów

Tytuł Szczegóły
Składnik Azure Document DB
Faza SDL Kompilacja
Odpowiednie technologie Ogólny
Atrybuty Nie dotyczy
Odwołania Nie dotyczy
Kroki Zmniejsz czas tokenu zasobu do minimalnej wymaganej wartości. Tokeny zasobów mają domyślny prawidłowy okres 1 godziny.

Implementowanie odpowiedniego wylogowania przy użyciu metod WsFederation podczas korzystania z usług AD FS

Tytuł Szczegóły
Składnik ADFS
Faza SDL Kompilacja
Odpowiednie technologie Ogólny
Atrybuty Nie dotyczy
Odwołania Nie dotyczy
Kroki Jeśli aplikacja opiera się na tokenie usługi STS wystawionym przez usługi ADFS, procedura obsługi zdarzeń wylogowania powinna wywołać metodę WSFederationAuthenticationModule.FederatedSignOut(), aby wylogować użytkownika. Ponadto bieżąca sesja powinna zostać zniszczona, a wartość tokenu sesji powinna zostać zresetowana i zerowana.

Przykład

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

Implementowanie odpowiedniego wylogowywu podczas korzystania z serwera tożsamości

Tytuł Szczegóły
Składnik Serwer tożsamości
Faza SDL Kompilacja
Odpowiednie technologie Ogólny
Atrybuty Nie dotyczy
Odwołania Wyloguj się z serwera IdentityServer3-Federated
Kroki Serwer IdentityServer obsługuje możliwość federowania z zewnętrznymi dostawcami tożsamości. Gdy użytkownik wyekspuje się u nadrzędnego dostawcy tożsamości, w zależności od używanego protokołu może być możliwe otrzymanie powiadomienia po jego wyykluczeniu. Umożliwia to serwerowi IdentityServer powiadamianie swoich klientów, dzięki czemu mogą również wylogować użytkownika. Aby uzyskać szczegółowe informacje o implementacji, zapoznaj się z dokumentacją w sekcji dokumentacji.

Aplikacje dostępne za pośrednictwem protokołu HTTPS muszą używać bezpiecznych plików cookie

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Kompilacja
Odpowiednie technologie Ogólny
Atrybuty EnvironmentType — onPrem
Odwołania httpCookies, element (ASP.NET Ustawienia Schema), Właściwość HttpCookie.Secure
Kroki Pliki cookie są zwykle dostępne tylko dla domeny, dla której zostały objęte zakresem. Niestety, definicja "domeny" nie zawiera protokołu , dlatego pliki cookie tworzone za pośrednictwem protokołu HTTPS są dostępne za pośrednictwem protokołu HTTP. Atrybut "secure" wskazuje przeglądarce, że plik cookie powinien być dostępny tylko za pośrednictwem protokołu HTTPS. Upewnij się, że wszystkie pliki cookie ustawione za pośrednictwem protokołu HTTPS używają atrybutu secure. Wymaganie można wymusić w pliku web.config, ustawiając atrybut requireSSL na wartość true. Jest to preferowane podejście, ponieważ będzie wymuszać bezpieczny atrybut dla wszystkich bieżących i przyszłych plików cookie bez konieczności wprowadzać żadnych dodatkowych zmian w kodzie.

Przykład

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

To ustawienie jest wymuszane nawet wtedy, gdy protokół HTTP jest używany do uzyskiwania dostępu do aplikacji. Jeśli protokół HTTP jest używany do uzyskiwania dostępu do aplikacji, ustawienie przerywa aplikację, ponieważ pliki cookie są ustawiane przy użyciu atrybutu secure, a przeglądarka nie wyśle ich z powrotem do aplikacji.

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Kompilacja
Odpowiednie technologie Web Forms, MVC5
Atrybuty EnvironmentType — onPrem
Odwołania Nie dotyczy
Kroki Gdy aplikacja internetowa jest jednostką jednostki zależnej, a identyfikatorem jest serwer usług AD FS, bezpieczny atrybut tokenu FedAuth można skonfigurować, ustawiając wartość requireSSL na True w system.identityModel.services sekcji web.config:

Przykład

  <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>
Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Kompilacja
Odpowiednie technologie Ogólny
Atrybuty Nie dotyczy
Odwołania Atrybut bezpiecznego pliku cookie
Kroki Aby zmniejszyć ryzyko ujawnienia informacji w przypadku ataku ze skryptami między witrynami (XSS), nowy atrybut — httpOnly — został wprowadzony do plików cookie i jest obsługiwany przez wszystkie główne przeglądarki. Atrybut określa, że plik cookie nie jest dostępny za pośrednictwem skryptu. Używając plików cookie HttpOnly, aplikacja internetowa zmniejsza prawdopodobieństwo, że poufne informacje zawarte w pliku cookie mogą zostać skradzione za pośrednictwem skryptu i wysłane do witryny internetowej osoby atakującej.

Przykład

Wszystkie aplikacje oparte na http, które używają plików cookie, powinny określić wartość HttpOnly w definicji pliku cookie, implementując następującą konfigurację w web.config:

<system.web>
.
.
   <httpCookies requireSSL="false" httpOnlyCookies="true"/>
.
.
</system.web>
Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Kompilacja
Odpowiednie technologie Formularze sieci Web
Atrybuty Nie dotyczy
Odwołania FormsAuthentication.RequireSSL, właściwość
Kroki Wartość właściwości RequireSSL jest ustawiana w pliku konfiguracji dla aplikacji ASP.NET przy użyciu atrybutu requireSSL elementu konfiguracji. W pliku Web.config dla aplikacji usługi ASP.NET można określić, czy protokół Transport Layer Security (TLS), wcześniej znany jako SSL (Secure Sockets Layer), jest wymagany do zwrócenia pliku cookie uwierzytelniania formularzy na serwer, ustawiając atrybut requireSSL.

Przykład

Poniższy przykład kodu ustawia atrybut requireSSL w Web.config pliku.

<authentication mode="Forms">
  <forms loginUrl="member_login.aspx" cookieless="UseCookies" requireSSL="true"/>
</authentication>
Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Kompilacja
Odpowiednie technologie MVC5
Atrybuty EnvironmentType — onPrem
Odwołania Windows Konfiguracja programu Identity Foundation (WIF) — część II
Kroki Aby ustawić atrybut httpOnly dla plików cookie fedAuth, wartość atrybutu hideFromCs relit powinna mieć wartość True.

Przykład

Następująca konfiguracja przedstawia poprawną konfigurację:

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

Ograniczanie ryzyka ataków fałszerczych żądań między witrynami (CSRF, Cross-Site Request Forgery) ASP.NET stron internetowych

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Kompilacja
Odpowiednie technologie Ogólny
Atrybuty Nie dotyczy
Odwołania Nie dotyczy
Kroki Fałszerość żądań między witrynami (CSRF lub XSRF) to typ ataku, w którym osoba atakująca może wykonywać akcje w kontekście zabezpieczeń sesji ustanowionej przez innego użytkownika w witrynie internetowej. Celem jest zmodyfikowanie lub usunięcie zawartości, jeśli docelowa witryna internetowa korzysta wyłącznie z plików cookie sesji w celu uwierzytelnienia odebranego żądania. Osoba atakująca może wykorzystać tę lukę w zabezpieczeniach, umożliwiając innej przeglądarce użytkownika załadowanie adresu URL z poleceniem z witryny, w której użytkownik jest już zalogowany. Istnieje wiele sposobów, na które osoba atakująca może to zrobić, na przykład hostowanie innej witryny internetowej, która ładuje zasób z serwera narażonego na ataki, lub nakłoń użytkownika do kliknięcia linku. Atak można zapobiec, jeśli serwer wyśle dodatkowy token do klienta, wymaga od klienta dołączyć ten token we wszystkich przyszłych żądaniach i sprawdzi, czy wszystkie przyszłe żądania zawierają token dotyczący bieżącej sesji, na przykład przy użyciu tokenu ASP.NET AntiForgeryToken lub ViewState.
Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Kompilacja
Odpowiednie technologie MVC5, MVC6
Atrybuty Nie dotyczy
Odwołania Zapobieganie atakom XSRF/CSRF we wzorcach ASP.NET MVC i Web Pages
Kroki Anty CSRF i ASP.NET formularzy MVC — użyj metody pomocnika w widokach; umieść w AntiForgeryToken Html.AntiForgeryToken() formularzu, na przykład

Przykład

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

Przykład

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

Przykład

W tym samym czasie kod Html.AntiForgeryToken() dostarcza odwiedzającemu plik cookie o nazwie __RequestVerificationToken z taką samą wartością jak losowa ukryta wartość pokazana powyżej. Następnie, aby zweryfikować przychodzący wpis formularza, dodaj filtr [ValidateAntiForgeryToken] do docelowej metody akcji. Na przykład:

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

Filtr autoryzacji, który sprawdza, czy:

  • Żądanie przychodzące ma plik cookie o nazwie __RequestVerificationToken
  • Żądanie przychodzące ma wpis Request.Form o nazwie __RequestVerificationToken
  • Te pliki cookie i Request.Form wartości są zgodne przy założeniu, że wszystko jest dobrze, żądanie przechodzi tak samo jak zwykle. Jeśli nie, oznacza to błąd autoryzacji z komunikatem "Wymagany token zabezpieczający przed fałszertwą nie został podany lub jest nieprawidłowy".

Przykład

Anti-CSRF i AJAX: token formularza może być problemem w przypadku żądań AJAX, ponieważ żądanie AJAX może wysyłać dane JSON, a nie dane formularza HTML. Jednym z rozwiązań jest wysłanie tokenów w niestandardowym nagłówku HTTP. Poniższy kod używa składnia Razor do generowania tokenów, a następnie dodaje tokeny do żądania 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>

Przykład

Podczas przetwarzania żądania wyodrębnij tokeny z nagłówka żądania. Następnie wywołaj metodę AntiForgery.Validate, aby zweryfikować tokeny. Metoda Validate zgłasza wyjątek, jeśli tokeny są nieprawidłowe.

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);
}
Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Kompilacja
Odpowiednie technologie Formularze sieci Web
Atrybuty Nie dotyczy
Odwołania Wykorzystaj możliwości ASP.NET wbudowanych w celu zdyskułowania ataków w Internecie
Kroki Ataki CSRF w aplikacjach opartych na formularzu WebForm można ograniczyć, ustawiając wartość ViewStateUserKey na losowy ciąg, który różni się dla każdego użytkownika — identyfikator użytkownika lub, jeszcze lepiej, identyfikator sesji. Ze względów technicznych i społecznościowych identyfikator sesji jest o wiele lepiej dopasowany, ponieważ identyfikator sesji jest nieprzewidywalny, a jego czas jest zmienny w zależności od użytkownika.

Przykład

Oto kod, który należy mieć na wszystkich stronach:

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

Konfigurowanie sesji dla okresu istnienia braku aktywności

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Kompilacja
Odpowiednie technologie Ogólny
Atrybuty Nie dotyczy
Odwołania HttpSessionState.Timeout, właściwość
Kroki Limit czasu sesji reprezentuje zdarzenie występujące, gdy użytkownik nie wykonuje żadnych akcji w witrynie internetowej w interwale (zdefiniowanym przez serwer sieci Web). Zdarzenie po stronie serwera zmień stan sesji użytkownika na "nieprawidłowy" (na przykład "nie jest już używany") i poinstruuj serwer internetowy, aby zniszczył ją (usuwając wszystkie zawarte w nim dane). Poniższy przykład kodu ustawia atrybut sesji limitu czasu na 15 minut w Web.config pliku.

Przykład

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

Włączanie wykrywania zagrożeń na platformie Azure SQL

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Kompilacja
Odpowiednie technologie Formularze sieci Web
Atrybuty Nie dotyczy
Odwołania Forms, element do uwierzytelniania (ASP.NET Ustawienia schemacie)
Kroki Ustaw limit czasu pliku cookie biletu uwierzytelniania formularzy na 15 minut

Przykład

<forms  name=".ASPXAUTH" loginUrl="login.aspx"  defaultUrl="default.aspx" protection="All" timeout="15" path="/" requireSSL="true" slidingExpiration="true"/>
</forms>
Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Kompilacja
Odpowiednie technologie Web Forms, MVC5
Atrybuty EnvironmentType — onPrem
Odwołania asdeqa
Kroki Jeśli aplikacja internetowa jest jednostką jednostki zależnej, a usługi ADFS są usługami STS, okres istnienia plików cookie uwierzytelniania — tokeny FedAuth — można ustawić za pomocą następującej konfiguracji w web.config:

Przykład

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

Przykład

Ponadto okres istnienia tokenu oświadczenia SAML wystawionego przez usługi AD FS należy ustawić na 15 minut, wykonując następujące polecenie programu PowerShell na serwerze usług AD FS:

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

Implementowanie prawidłowego wylogowywu z aplikacji

Tytuł Szczegóły
Składnik Aplikacja internetowa
Faza SDL Kompilacja
Odpowiednie technologie Ogólny
Atrybuty Nie dotyczy
Odwołania Nie dotyczy
Kroki Wykonaj odpowiednie wyloguj się z aplikacji, gdy użytkownik naciśnie przycisk wylogowania. Po wylogowaniu aplikacja powinna zniszczyć sesję użytkownika, a także zresetować i zerować wartość pliku cookie sesji, a także zresetować i zerować wartość pliku cookie uwierzytelniania. Ponadto jeśli wiele sesji jest powiązanych z jedną tożsamością użytkownika, muszą one zostać zakończone zbiorczo po stronie serwera po przeoczanie limitu czasu lub wylogowanie. Na koniec upewnij się, że funkcje wylogowywu są dostępne na każdej stronie.

Ograniczanie ryzyka ataków fałszerczych żądań między witrynami (CSRF, Cross-Site Request Forgery) ASP.NET internetowych interfejsów API

Tytuł Szczegóły
Składnik Interfejs API sieci Web
Faza SDL Kompilacja
Odpowiednie technologie Ogólny
Atrybuty Nie dotyczy
Odwołania Nie dotyczy
Kroki Fałszerzanie żądań między witrynami (CSRF lub XSRF) to typ ataku, w którym osoba atakująca może wykonywać akcje w kontekście zabezpieczeń sesji ustanowionej przez innego użytkownika w witrynie internetowej. Celem jest zmodyfikowanie lub usunięcie zawartości, jeśli docelowa witryna internetowa korzysta wyłącznie z plików cookie sesji w celu uwierzytelnienia odebranego żądania. Osoba atakująca może wykorzystać tę lukę w zabezpieczeniach, umożliwiając przeglądarce innego użytkownika załadowanie adresu URL za pomocą polecenia z witryny, w której użytkownik jest już zalogowany. Istnieje wiele sposobów, na które osoba atakująca może to zrobić, na przykład hostowanie innej witryny internetowej, która ładuje zasób z narażonego serwera lub nakłonianie użytkownika do kliknięcia linku. Atak można zapobiec, jeśli serwer wysyła dodatkowy token do klienta, wymaga, aby klient uwzględnił ten token we wszystkich przyszłych żądaniach i sprawdza, czy wszystkie przyszłe żądania zawierają token odnoszący się do bieżącej sesji, na przykład przy użyciu tokenu ASP.NET AntiForgeryToken lub ViewState.
Tytuł Szczegóły
Składnik Interfejs API sieci Web
Faza SDL Kompilacja
Odpowiednie technologie MVC5, MVC6
Atrybuty Nie dotyczy
Odwołania Zapobieganie atakom fałszerczym żądań między witrynami (CSRF) w ASP.NET web API
Kroki Anty-CSRF i AJAX: token formularza może być problemem dla żądań AJAX, ponieważ żądanie AJAX może wysyłać dane JSON, a nie dane formularza HTML. Jednym z rozwiązań jest wysłanie tokenów w niestandardowym nagłówku HTTP. Poniższy kod używa składnia Razor do generowania tokenów, a następnie dodaje tokeny do żądania AJAX.

Przykład

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

Przykład

Podczas przetwarzania żądania wyodrębnij tokeny z nagłówka żądania. Następnie wywołaj metodę AntiForgery.Validate, aby zweryfikować tokeny. Metoda Validate zgłasza wyjątek, jeśli tokeny są nieprawidłowe.

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

Przykład

Anty CSRF i ASP.NET MVC — użyj metody pomocnika AntiForgeryToken w widokach; umieść element Html.AntiForgeryToken() w formularzu, na przykład

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

Przykład

W powyższym przykładzie dane wyjściowe będą podobne do następujących:

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

Przykład

Jednocześnie obiekt html.AntiForgeryToken() udostępnia obiektowi odwiedzającemu plik cookie o nazwie __RequestVerificationToken, z taką samą wartością jak losowa ukryta wartość pokazana powyżej. Następnie, aby zweryfikować przychodzący wpis formularza, dodaj filtr [ValidateAntiForgeryToken] do docelowej metody akcji. Na przykład:

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

Filtr autoryzacji, który sprawdza, czy:

  • Żądanie przychodzące ma plik cookie o nazwie __RequestVerificationToken
  • Żądanie przychodzące ma wpis Request.Form o nazwie __RequestVerificationToken
  • Te pliki cookie i Request.Form wartości są zgodne przy założeniu, że wszystko jest dobrze, żądanie przechodzi tak samo jak zwykle. Jeśli tak nie jest, oznacza to błąd autoryzacji z komunikatem "Wymagany token zabezpieczający przed fałszertwą nie został podany lub jest nieprawidłowy".
Tytuł Szczegóły
Składnik Interfejs API sieci Web
Faza SDL Kompilacja
Odpowiednie technologie MVC5, MVC6
Atrybuty Dostawca tożsamości — USŁUGI ADFS, Dostawca tożsamości — Azure AD
Odwołania Zabezpieczanie internetowego interfejsu API przy użyciu indywidualnych kont i logowania lokalnego w ASP.NET Web API 2.2
Kroki Jeśli internetowy interfejs API jest zabezpieczony przy użyciu protokołu OAuth 2.0, oczekuje tokenu bearer w nagłówku żądania autoryzacji i udziela dostępu do żądania tylko wtedy, gdy token jest prawidłowy. W przeciwieństwie do uwierzytelniania opartego na plikach cookie przeglądarki nie dołączają tokenów okaziciela do żądań. Klient żądający musi jawnie dołączyć token bearer w nagłówku żądania. W związku z tym w ASP.NET internetowych interfejsów API chronionych przy użyciu protokołu OAuth 2.0 tokeny okaziciela są traktowane jako ochrona przed atakami CSRF. Należy pamiętać, że jeśli część MVC aplikacji korzysta z uwierzytelniania formularzy (tj. używa plików cookie), tokeny zabezpieczające przed fałszerością muszą być używane przez aplikację internetową MVC.

Przykład

Internetowy interfejs API musi być poinformowany, aby polegał TYLKO na tokenach okaziciela, a nie na plikach cookie. Można to zrobić za pomocą następującej konfiguracji w WebApiConfig.Register metodzie :

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

Metoda SuppressDefaultHostAuthentication nakazuje interfejsowi Web API zignorowanie dowolnego uwierzytelniania, które ma miejsce przed dotarciem żądania do potoku internetowego interfejsu API przez usługi IIS lub oprogramowanie pośredniczące OWIN. Dzięki temu możemy ograniczyć internetowy interfejs API do uwierzytelniania tylko przy użyciu tokenów okaziciela.