Güvenlik: Tanımlama bilgisi adı kodlaması kaldırıldı

HTTP tanımlama bilgisi standardı, tanımlama bilgisi adlarında ve değerlerinde yalnızca belirli karakterlere izin verir. İzin verilmeyen karakterleri desteklemek için ASP.NET Core:

  • Yanıt tanımlama bilgisi oluştururken kodlar.
  • İstek tanımlama bilgisini okurken kodu çözer.

ASP.NET Core 5.0'da bu kodlama davranışı bir güvenlik sorununa yanıt olarak değişti.

Tartışma için bkz. GitHub sorunu dotnet/aspnetcore#23578.

Sürüm kullanıma sunulmuştur

5.0 Önizleme 8

Eski davranış

Yanıt tanımlama bilgisi adları kodlanır. İstek tanımlama bilgisi adlarının kodu çözüldü.

Yeni davranış

Tanımlama bilgisi adlarının kodlanması ve kodunun çözülmesi kaldırıldı. ASP.NET Core'un desteklenen önceki sürümleri için ekip, kod çözme sorununu yerinde azaltmayı planlıyor. Ayrıca, geçersiz bir tanımlama bilgisi adıyla çağrılması IResponseCookies.Append türünde ArgumentExceptionbir özel durum oluşturur. Tanımlama bilgisi değerlerinin kodlanması ve kodunun çözülmesi değişmeden kalır.

Değişiklik nedeni

Birden çok web çerçevesinde bir sorun bulundu. Kodlama ve kod çözme, bir saldırganın gibi ayrılmış ön ekleri gibi __%48ost-kodlanmış değerlerle yanıltarak tanımlama bilgisi ön ekleri __Host- olarak adlandırılan bir güvenlik özelliğini atlamasına izin verebilir. Saldırı, siteler arası betik oluşturma (XSS) güvenlik açığı gibi sahte tanımlama bilgilerini web sitesine eklemek için ikincil bir açık gerektirir. Bu ön ekler, ASP.NET Core'da, kitaplıklarda veya Microsoft.Owin şablonlarda varsayılan olarak kullanılmaz.

Projeleri ASP.NET Core 5.0 veya sonraki bir sürüme taşıyorsanız, tanımlama bilgisi adlarının belirteç belirtimi gereksinimlerine uygun olduğundan emin olun: denetimler ve ayırıcılar "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HThariç ASCII karakterler. Tanımlama bilgisi adlarında veya diğer HTTP üst bilgilerinde ASCII olmayan karakterlerin kullanılması sunucudan bir özel duruma neden olabilir veya istemci tarafından yanlış yuvarlanmış olabilir.

Etkilenen API’ler