Sampel cookie SameSite untuk webForms ASP.NET 4.7.2 VB
.NET Framework 4.7 memiliki dukungan bawaan untuk atribut SameSite, tetapi mematuhi standar asli.
Perilaku yang di-patch mengubah arti untuk memancarkan SameSite.None
atribut dengan nilai , daripada tidak memancarkan None
nilai sama sekali. Jika Anda ingin tidak memancarkan nilai, Anda dapat mengatur SameSite
properti pada cookie ke -1.
Berikut ini adalah contoh cara menulis atribut SameSite pada cookie;
' Create the cookie
Dim sameSiteCookie As New HttpCookie("sameSiteSample")
' Set a value for the cookie
sameSiteCookie.Value = "sample"
' Set the secure flag, which Chrome's changes will require for SameSite none.
' Note this will also require you to be running on HTTPS
sameSiteCookie.Secure = True
' Set the cookie to HTTP only which is good practice unless you really do need
' to access it client side in scripts.
sameSiteCookie.HttpOnly = True
' Expire the cookie in 1 minute
sameSiteCookie.Expires = Date.Now.AddMinutes(1)
' Add the SameSite attribute, this will emit the attribute with a value of none.
' To Not emit the attribute at all set the SameSite property to -1.
sameSiteCookie.SameSite = SameSiteMode.None
' Add the cookie to the response cookie collection
Response.Cookies.Add(sameSiteCookie)
Jika Anda membaca ini dalam bahasa selain bahasa Inggris, beri tahu kami dalam masalah diskusi GitHub ini jika Anda ingin melihat komentar kode dalam bahasa asli Anda.
Atribut sameSite default untuk cookie autentikasi formulir diatur dalam cookieSameSite
parameter pengaturan autentikasi formulir di web.config
<system.web>
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="~/" cookieSameSite="None" requireSSL="true">
</forms>
</authentication>
</system.web>
Atribut sameSite default untuk status sesi juga diatur dalam parameter 'cookieSameSite' dari pengaturan sesi di web.config
<system.web>
<sessionState cookieSameSite="None">
</sessionState>
</system.web>
Pembaruan November 2019 ke .NET mengubah pengaturan default untuk Autentikasi Formulir dan Sesi menjadi lax
sebagai pengaturan yang paling kompatibel, namun jika Anda menyematkan halaman ke iframe, Anda mungkin perlu mengembalikan pengaturan ini ke Tidak Ada, lalu menambahkan kode penyadapan yang ditunjukkan di bawah ini untuk menyesuaikan none
perilaku tergantung pada kemampuan browser.
Jika Anda menjalankan proyek sampel, muat debugger browser Anda di halaman awal dan gunakan untuk melihat kumpulan cookie untuk situs tersebut.
Untuk melakukannya di Edge dan Chrome tekan F12
lalu pilih Application
tab dan klik URL situs di bawah Cookies
opsi di bagian Storage
.
Anda dapat melihat dari gambar di atas bahwa cookie yang dibuat oleh sampel ketika Anda mengklik tombol "Buat Cookie" memiliki nilai Lax
atribut SameSite , yang cocok dengan nilai yang ditetapkan dalam kode sampel.
.NET 4.5.2 memperkenalkan peristiwa baru untuk mencegat penulisan header, Response.AddOnSendingHeaders
. Ini dapat digunakan untuk mencegat cookie sebelum dikembalikan ke komputer klien. Dalam sampel, kami menyambungkan peristiwa ke metode statis yang memeriksa apakah browser mendukung perubahan sameSite baru, dan jika tidak, mengubah cookie untuk tidak memancarkan atribut jika nilai baru None
telah ditetapkan.
Lihat global.asax untuk contoh menghubungkan peristiwa dan SameSiteCookieRewriter.cs untuk contoh penanganan peristiwa dan menyesuaikan atribut cookie sameSite
.
Sub FilterSameSiteNoneForIncompatibleUserAgents(ByVal sender As Object)
Dim application As HttpApplication = TryCast(sender, HttpApplication)
If application IsNot Nothing Then
Dim userAgent = application.Context.Request.UserAgent
If SameSite.DisallowsSameSiteNone(userAgent) Then
application.Response.AddOnSendingHeaders(
Function(context)
Dim cookies = context.Response.Cookies
For i = 0 To cookies.Count - 1
Dim cookie = cookies(i)
If cookie.SameSite = SameSiteMode.None Then
cookie.SameSite = CType((-1), SameSiteMode)
End If
Next
End Function)
End If
End If
End Sub
Anda dapat mengubah perilaku cookie bernama tertentu dengan cara yang sama; sampel di bawah ini menyesuaikan cookie autentikasi default dari Lax
ke None
pada browser yang mendukung None
nilai, atau menghapus atribut sameSite pada browser yang tidak mendukung None
.
Public Shared Sub AdjustSpecificCookieSettings()
HttpContext.Current.Response.AddOnSendingHeaders(Function(context)
Dim cookies = context.Response.Cookies
For i = 0 To cookies.Count - 1
Dim cookie = cookies(i)
If String.Equals(".ASPXAUTH", cookie.Name, StringComparison.Ordinal) Then
If SameSite.BrowserDetection.DisallowsSameSiteNone(userAgent) Then
cookie.SameSite = -1
Else
cookie.SameSite = SameSiteMode.None
End If
cookie.Secure = True
End If
Next
End Function)
End Sub