Keamanan: Pengodean nama cookie dihapus
Standar cookie HTTP hanya memungkinkan karakter tertentu dalam nama dan nilai cookie. Untuk mendukung karakter yang tidak diizinkan, ASP.NET Core:
- Mengodekan saat membuat cookie respons.
- Dekode saat membaca cookie permintaan.
Dalam ASP.NET Core 5.0, perilaku pengodean ini berubah sebagai respons terhadap masalah keamanan.
Untuk diskusi, lihat Masalah GitHub dotnet/aspnetcore#23578.
Versi yang diperkenalkan
5.0 Pratinjau 8
Perilaku yang lama
Nama cookie respons dikodekan. Nama cookie permintaan didekodekan.
Perilaku yang baru
Pengodean dan pendekodean nama cookie dihapus. Untuk versi ASP.NET Core yang didukung sebelumnya, tim berencana untuk mengurangi masalah decoding di tempat. Selain itu, memanggil IResponseCookies.Append dengan nama cookie yang tidak valid memberikan pengecualian jenis ArgumentException. Pengodean dan pendekodean nilai cookie tetap tidak berubah.
Alasan untuk berubah
Masalah ditemukan di beberapa kerangka kerja web. Pengodean dan decoding dapat memungkinkan penyerang untuk melewati fitur keamanan yang disebut awalan cookie dengan melakukan spoofing awalan yang dipesan seperti __Host-
dengan nilai yang dikodekan seperti __%48ost-
. Serangan ini membutuhkan eksploitasi sekunder untuk menyuntikkan cookie spoofed, seperti kerentanan scripting lintas situs (XSS), di situs web. Awalan ini tidak digunakan secara default di ASP.NET Core atau Microsoft.Owin
pustaka atau templat.
Tindakan yang direkomendasikan
Jika Anda memindahkan proyek ke ASP.NET Core 5.0 atau yang lebih baru, pastikan bahwa nama cookie mereka sesuai dengan persyaratan spesifikasi token: Karakter ASCII tidak termasuk kontrol dan pemisah "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT
. Penggunaan karakter non-ASCII dalam nama cookie atau header HTTP lainnya dapat menyebabkan pengecualian dari server atau disandingkan secara tidak benar oleh klien.
API yang Terpengaruh
- HttpRequest.Cookies
- HttpResponse.Cookies
Microsoft.Owin.IOwinRequest.Cookies
Microsoft.Owin.IOwinResponse.Cookies