| Ü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
Ö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>
Tüm http tabanlı uygulamalar yalnızca tanımlama bilgisi tanımı için http belirtmelidir
| 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
Ö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.