Middleware ASP.NET Core OpenId Koneksi memungkinkan aplikasi Anda untuk mencegat panggilan ke titik akhir keluar platform identitas Microsoft dengan menyediakan peristiwa OpenId Koneksi bernamaOnRedirectToIdentityProviderForSignOut
Menggunakan masa pakai terbatas untuk token SaS yang dihasilkan
Judul
Detail
Komponen
Perangkat IoT
Fase SDL
Bangun
Teknologi yang Berlaku
Generik
Atribut
T/A
Referensi
T/A
Langkah-langkah
Token SaS yang dihasilkan untuk mengautentikasi ke Azure IoT Hub harus memiliki periode kedaluwarsa yang terbatas. Jaga agar masa pakai token SaS tetap minimum untuk membatasi jumlah waktu mereka dapat diputar ulang jika token telah disusupi.
Menggunakan masa pakai token minimum untuk token Resource yang dihasilkan
Judul
Detail
Komponen
Azure Document DB
Fase SDL
Bangun
Teknologi yang Berlaku
Generik
Atribut
T/A
Referensi
T/A
Langkah-langkah
Kurangi rentang waktu token sumber daya ke nilai minimum yang diperlukan. Token sumber daya memiliki rentang waktu valid default 1 jam.
Menerapkan proses keluar yang tepat menggunakan metode WsFederation saat menggunakan ADFS
Judul
Detail
Komponen
ADFS
Fase SDL
Bangun
Teknologi yang Berlaku
Generik
Atribut
T/A
Referensi
T/A
Langkah-langkah
Jika aplikasi bergantung pada token STS yang dikeluarkan oleh ADFS, penanganan aktivitas keluar harus memanggil metode WSFederationAuthenticationModule.FederatedSignOut() untuk memproses keluar pengguna. Sesi saat ini juga harus dihancurkan, dan nilai token sesi harus direset dan dibatalkan.
Contoh
[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);
}
Menerapkan proses keluar yang tepat menggunakan Server Identitas
IdentityServer mendukung kemampuan untuk federasi dengan penyedia identitas eksternal. Ketika pengguna keluar dari penyedia identitas upstream, tergantung pada protokol yang digunakan, mungkin untuk menerima pemberitahuan ketika pengguna keluar. Hal ini memungkinkan IdentityServer untuk memberi tahu kliennya sehingga mereka juga dapat memproses keluar pengguna. Periksa dokumentasi di bagian referensi untuk detail implementasi.
Aplikasi yang tersedia melalui HTTPS harus menggunakan cookie aman
Cookie biasanya hanya dapat diakses oleh domain yang cakupannya tercakup. Sayangnya, definisi "domain" tidak termasuk protokol sehingga cookie yang dibuat melalui HTTPS dapat diakses melalui HTTP. Atribut "aman" menunjukkan kepada browser bahwa cookie hanya boleh tersedia melalui HTTPS. Pastikan bahwa semua cookie yang diatur melalui HTTPS menggunakan atribut aman. Persyaratan dapat diberlakukan dalam file web.config dengan mengatur atribut requireSSL ke true. Ini adalah pendekatan yang disukai karena akan memberlakukan atribut aman untuk semua cookie saat ini dan yang akan datang tanpa perlu membuat perubahan kode tambahan.
Pengaturan diberlakukan bahkan jika HTTP digunakan untuk mengakses aplikasi. Jika HTTP digunakan untuk mengakses aplikasi, pengaturan memutus aplikasi karena cookie diatur dengan atribut aman dan browser tidak akan mengirimnya kembali ke aplikasi.
Judul
Detail
Komponen
Aplikasi Web
Fase SDL
Bangun
Teknologi yang Berlaku
Web Forms, MVC5
Atribut
EnvironmentType - OnPrem
Referensi
T/A
Langkah-langkah
Ketika aplikasi web adalah Pihak Yang Mengandalkan, dan IdP adalah server ADFS, atribut aman token FedAuth dapat dikonfigurasi dengan mengatur requireSSL ke True di bagian system.identityModel.services web.config:
Contoh
<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>
Semua aplikasi berbasis http harus menentukan http hanya untuk definisi cookie
Untuk mengurangi risiko pengungkapan informasi dengan serangan scripting lintas situs (XSS), atribut baru - httpOnly - diperkenalkan ke cookie dan didukung oleh semua browser utama. Atribut menentukan bahwa cookie tidak dapat diakses melalui skrip. Dengan menggunakan cookie HttpOnly, aplikasi web mengurangi kemungkinan bahwa informasi sensitif yang terkandung dalam cookie dapat dicuri melalui skrip dan dikirim ke situs web penyerang.
Contoh
Semua aplikasi berbasis HTTP yang menggunakan cookie harus menentukan HttpOnly dalam definisi cookie, dengan menerapkan konfigurasi berikut dalam web.config:
Nilai properti RequireSSL diatur dalam file konfigurasi untuk aplikasi ASP.NET dengan menggunakan atribut requireSSL dari elemen konfigurasi. Anda dapat menentukan dalam file Web.config untuk aplikasi ASP.NET Anda apakah Keamanan Lapisan Transportasi (TLS), sebelumnya dikenal sebagai SSL (Secure Sockets Layer), diperlukan untuk menampilkan cookie autentikasi formulir ke server dengan mengatur atribut requireSSL.
Contoh
Contoh kode berikut mengatur atribut requireSSL dalam file Web.config.
Mitigasi terhadap serangan Pemalsuan Permintaan Antar Situs (CSRF) ASP.NET halaman web
Judul
Detail
Komponen
Aplikasi Web
Fase SDL
Bangun
Teknologi yang Berlaku
Generik
Atribut
T/A
Referensi
T/A
Langkah-langkah
Pemalsuan permintaan antar situs (CSRF atau XSRF) adalah jenis serangan di mana penyerang dapat melakukan tindakan dalam konteks keamanan sesi yang ditetapkan pengguna yang berbeda di situs web. Tujuannya adalah untuk memodifikasi atau menghapus konten, jika situs web yang ditargetkan bergantung secara eksklusif pada cookie sesi untuk mengautentikasi permintaan yang diterima. Penyerang dapat mengeksploitasi kerentanan ini dengan mendapatkan browser pengguna yang berbeda untuk memuat URL dengan perintah dari situs yang rentan di mana pengguna sudah masuk. Ada banyak cara bagi penyerang untuk melakukan itu, seperti dengan menghosting situs web yang berbeda yang memuat sumber daya dari server yang rentan, atau membuat pengguna mengklik tautan. Serangan dapat dicegah jika server mengirim token tambahan ke klien, mengharuskan klien untuk memasukkan token itu dalam semua permintaan di masa mendatang, dan memverifikasi bahwa semua permintaan di masa depan termasuk token yang berkaitan dengan sesi saat ini, seperti dengan menggunakan ASP.NET AntiForgeryToken atau ViewState.
Formulir anti-CSRF dan ASP.NET MVC - Gunakan metode pembantu AntiForgeryToken pada Tampilan; masukkan Html.AntiForgeryToken() ke dalam formulir, misalnya,
<form action="/UserProfile/SubmitUpdate" method="post">
<input name="__RequestVerificationToken" type="hidden" value="saTFWpkKN0BYazFtN6c4YbZAmsEwG0srqlUqqloi/fVgeV2ciIFVmelvzwRZpArs" />
<!-- rest of form goes here -->
</form>
Contoh
Pada saat yang sama, Html.AntiForgeryToken() memberi pengunjung cookie yang disebut __RequestVerificationToken, dengan nilai yang sama dengan nilai tersembunyi acak yang ditunjukkan di atas. Selanjutnya, untuk memvalidasi postingan formulir masuk, tambahkan filter [ValidateAntiForgeryToken] ke metode tindakan target. Contohnya:
[ValidateAntiForgeryToken]
public ViewResult SubmitUpdate()
{
// ... etc.
}
Filter otorisasi yang memeriksa bahwa:
Permintaan masuk memiliki cookie yang disebut __RequestVerificationToken
Permintaan masuk memiliki entri Request.Form yang disebut __RequestVerificationToken
Nilai cookie dan Request.Form ini cocok dengan Asumsi semua baik-baik saja, permintaan berjalan seperti biasa. Tetapi jika tidak, maka kegagalan otorisasi dengan pesan "Token anti-pemalsuan yang diperlukan tidak disediakan atau tidak valid".
Contoh
Anti-CSRF dan AJAX: Token formulir dapat menjadi masalah untuk permintaan AJAX, karena permintaan AJAX mungkin mengirim data JSON, bukan data formulir HTML. Salah satu solusinya adalah mengirim token di header HTTP kustom. Kode berikut menggunakan sintaks Razor untuk menghasilkan token, lalu menambahkan token ke permintaan 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>
Contoh
Saat Anda memproses permintaan, ekstrak token dari header permintaan. Lalu panggil metode AntiForgery.Validate untuk memvalidasi token. Metode Validasi memberikan pengecualian jika token tidak valid.
Serangan CSRF di aplikasi berbasis WebForm dapat dimitigasi dengan mengatur ViewStateUserKey ke string acak yang bervariasi untuk setiap pengguna - ID pengguna atau, lebih baik lagi, ID sesi. Untuk sejumlah alasan teknis dan sosial, ID sesi jauh lebih cocok karena ID sesi tidak dapat diprediksi, waktu habis, dan bervariasi berdasarkan per pengguna.
Contoh
Berikut adalah kode yang perlu Anda miliki di semua halaman Anda:
Waktu sesi habis mewakili aktivitas yang terjadi ketika pengguna tidak melakukan tindakan apa pun di situs web selama interval (didefinisikan oleh server web). Aktivitas, di sisi server, mengubah status sesi pengguna menjadi 'tidak valid' (misalnya "tidak digunakan lagi") dan menginstruksikan server web untuk menghancurkannya (menghapus semua data yang terkandung di dalamnya). Contoh kode berikut mengatur atribut sesi waktu habis menjadi 15 menit dalam file Web.config.
Ketika aplikasi web adalah Pihak yang Diandalkan dan ADFS adalah STS, masa pakai cookie autentikasi - token FedAuth - dapat diatur dengan konfigurasi berikut di web.config:
Contoh
<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>
Contoh
Token klaim SAML yang dikeluarkasn ADFS juga harus diatur ke 15 menit, dengan menjalankan perintah powershell berikut di server ADFS:
Lakukan Proses Keluar yang tepat dari aplikasi, ketika pengguna menekan tombol keluar. Setelah keluar, aplikasi harus menghancurkan sesi pengguna, dan juga mereset dan membatalkan nilai cookie sesi, bersama dengan reset dan pembatalan nilai cookie autentikasi. Juga, ketika beberapa sesi terkait dengan satu identitas pengguna, mereka harus secara kolektif dihentikan di sisi server pada waktu habis atau proses keluar. Terakhir, pastikan bahwa fungsi Keluar tersedia di setiap halaman.
Mitigasi terhadap serangan Pemalsuan Permintaan Antar Situs (CSRF) API Web ASP.NET
Judul
Detail
Komponen
API Web
Fase SDL
Bangun
Teknologi yang Berlaku
Generik
Atribut
T/A
Referensi
T/A
Langkah-langkah
Pemalsuan permintaan antar situs (CSRF atau XSRF) adalah jenis serangan di mana penyerang dapat melakukan tindakan dalam konteks keamanan sesi yang ditetapkan pengguna yang berbeda di situs web. Tujuannya adalah untuk memodifikasi atau menghapus konten, jika situs web yang ditargetkan bergantung secara eksklusif pada cookie sesi untuk mengautentikasi permintaan yang diterima. Penyerang dapat mengeksploitasi kerentanan ini dengan mendapatkan browser pengguna yang berbeda untuk memuat URL dengan perintah dari situs yang rentan di mana pengguna sudah masuk. Ada banyak cara bagi penyerang untuk melakukan itu, seperti dengan menghosting situs web yang berbeda yang memuat sumber daya dari server yang rentan, atau membuat pengguna mengklik tautan. Serangan dapat dicegah jika server mengirim token tambahan ke klien, mengharuskan klien untuk memasukkan token itu dalam semua permintaan di masa mendatang, dan memverifikasi bahwa semua permintaan di masa depan termasuk token yang berkaitan dengan sesi saat ini, seperti dengan menggunakan ASP.NET AntiForgeryToken atau ViewState.
Anti-CSRF dan AJAX: Token formulir dapat menjadi masalah untuk permintaan AJAX, karena permintaan AJAX mungkin mengirim data JSON, bukan data formulir HTML. Salah satu solusinya adalah mengirim token di header HTTP kustom. Kode berikut menggunakan sintaks Razor untuk menghasilkan token, lalu menambahkan token ke permintaan AJAX.
Contoh
<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>
Contoh
Saat Anda memproses permintaan, ekstrak token dari header permintaan. Lalu panggil metode AntiForgery.Validate untuk memvalidasi token. Metode Validasi memberikan pengecualian jika token tidak valid.
Formulir Anti-CSRF dan ASP.NET MVC - Gunakan metode pembantu AntiForgeryToken pada Tampilan; masukkan Html.AntiForgeryToken() ke dalam formulir, misalnya,
Contoh di atas akan menghasilkan sesuatu seperti berikut:
<form action="/UserProfile/SubmitUpdate" method="post">
<input name="__RequestVerificationToken" type="hidden" value="saTFWpkKN0BYazFtN6c4YbZAmsEwG0srqlUqqloi/fVgeV2ciIFVmelvzwRZpArs" />
<!-- rest of form goes here -->
</form>
Contoh
Pada saat yang sama, Html.AntiForgeryToken() memberi pengunjung cookie yang disebut __RequestVerificationToken, dengan nilai yang sama dengan nilai tersembunyi acak yang ditunjukkan di atas. Selanjutnya, untuk memvalidasi postingan formulir masuk, tambahkan filter [ValidateAntiForgeryToken] ke metode tindakan target. Contohnya:
[ValidateAntiForgeryToken]
public ViewResult SubmitUpdate()
{
// ... etc.
}
Filter otorisasi yang memeriksa bahwa:
Permintaan masuk memiliki cookie yang disebut __RequestVerificationToken
Permintaan masuk memiliki entri Request.Form yang disebut __RequestVerificationToken
Nilai cookie dan Request.Form ini cocok dengan Asumsi semua baik-baik saja, permintaan berjalan seperti biasa. Tetapi jika tidak, maka kegagalan otorisasi dengan pesan "Token anti-pemalsuan yang diperlukan tidak disediakan atau tidak valid".
Judul
Detail
Komponen
API Web
Fase SDL
Bangun
Teknologi yang Berlaku
MVC5, MVC6
Atribut
Penyedia Identitas - ADFS, Penyedia Identitas - ID Microsoft Entra
Jika API Web diamankan menggunakan OAuth 2.0, maka API mengharapkan token pembawa di header permintaan Autorisasi dan memberikan akses ke permintaan hanya jika token valid. Tidak seperti autentikasi berbasis cookie, browser tidak melampirkan token pembawa ke permintaan. Klien yang meminta perlu secara eksplisit melampirkan token pembawa di header permintaan. Oleh karena itu, untuk API Web ASP.NET yang dilindungi menggunakan OAuth 2.0, token pembawa dianggap sebagai pertahanan terhadap serangan CSRF. Harap dicatat bahwa jika bagian MVC dari aplikasi menggunakan autentikasi formulir (yaitu, menggunakan cookie), token anti-pemalsuan harus digunakan oleh aplikasi web MVC.
Contoh
API Web harus diberitahu untuk HANYA mengandalkan token pembawa dan bukan pada cookie. Hal ini dapat dilakukan dengan konfigurasi berikut dalam metode WebApiConfig.Register:
Metode SuppressDefaultHostAuthentication memberi tahu API Web untuk mengabaikan autentikasi apa pun yang terjadi sebelum permintaan mencapai alur API Web, baik oleh IIS atau oleh middleware OWIN. Dengan begitu, kita dapat membatasi API Web untuk mengautentikasi hanya menggunakan token pembawa.