ASP.NET Core'daki amaç dizeleri
Kullanan IDataProtectionProvider
bileşenlerin yöntemine benzersiz bir purposes parametresi geçirmesi CreateProtector
gerekir. Purposes parametresi , kök şifreleme anahtarları aynı olsa bile şifreleme tüketicileri arasında yalıtım sağladığından veri koruma sisteminin güvenliğine bağlıdır.
Tüketici bir amacı belirttiğinde, amaç dizesi kök şifreleme anahtarlarıyla birlikte bu tüketiciye özgü şifreleme alt anahtarları türetmek için kullanılır. Bu, tüketiciyi uygulamadaki diğer tüm şifreleme tüketicilerinden yalıtmaktadır: başka hiçbir bileşen yüklerini okuyamaz ve diğer bileşenlerin yüklerini okuyamaz. Bu yalıtım, bileşene yönelik saldırı kategorilerinin tamamını da işler.
Yukarıdaki diyagramda, IDataProtector
A ve B örnekleri birbirlerinin yüklerini okuyamaz, yalnızca kendi yüklerini okuyamaz .
Amaç dizesinin gizli olması gerekmez. Başka hiçbir iyi davranış gösteren bileşenin aynı amaç dizesini sağlaymayacak olması açısından benzersiz olmalıdır.
Bahşiş
Veri koruma API'lerini kullanan bileşenin ad alanını ve tür adını kullanmak, pratikte bu bilgiler hiçbir zaman çakışmayacağı için iyi bir kuraldır.
Taşıyıcı belirteçlerin basılmasından sorumlu olan Contoso tarafından yazılmış bir bileşen, amaç dizesi olarak Contoso.Security.BearerToken kullanabilir. Daha da iyisi, contoso.security.bearerToken.v1'i amaç dizesi olarak kullanabilir. Sürüm numarasının eklenmesi, gelecekteki bir sürümün amacı olarak Contoso.Security.BearerToken.v2 kullanmasına olanak tanır ve yüklerin kullanılabilmesi için farklı sürümler birbirinden tamamen yalıtılmış olur.
için purposes parametresi CreateProtector
bir dize dizisi olduğundan yukarıdakiler olarak [ "Contoso.Security.BearerToken", "v1" ]
belirtilebilirdi. Bu, bir amaç hiyerarşisi oluşturmaya olanak tanır ve veri koruma sistemiyle çok kiracılı senaryolar olasılığını açar.
Uyarı
Bileşenler, güvenilmeyen kullanıcı girişinin amaç zinciri için tek giriş kaynağı olmasını sağlamamalıdır.
Örneğin, güvenli iletileri depolamak için sorumlu olan Contoso.Messaging.SecureMessage bileşenini göz önünde bulundurun. Güvenli mesajlaşma bileşeni öğesini çağıracaksa CreateProtector([ username ])
, kötü amaçlı bir kullanıcı bileşeni CreateProtector([ "Contoso.Security.BearerToken" ])
çağırmak için "Contoso.Security.BearerToken" kullanıcı adıyla bir hesap oluşturabilir, bu nedenle güvenli mesajlaşma sisteminin yanlışlıkla kimlik doğrulama belirteçleri olarak algılanabilecek yükleri azaltmasına neden olabilir.
Mesajlaşma bileşeni için daha iyi bir amaç zinciri, düzgün yalıtım sağlayan olacaktır CreateProtector([ "Contoso.Messaging.SecureMessage", $"User: {username}" ])
.
tarafından sağlanan yalıtım ve , IDataProtector
ve amaçlarının IDataProtectionProvider
davranışları aşağıdaki gibidir:
Belirli
IDataProtectionProvider
bir nesne içinCreateProtector
yöntemi, hem onu oluşturan nesneye hem deIDataProtectionProvider
yönteme geçirilen purposes parametresine benzersiz olarak bağlı birIDataProtector
nesne oluşturur.Amaç parametresi null olmamalıdır. (Amaçlar bir dizi olarak belirtilirse, bu, dizinin sıfır uzunlukta olmaması ve dizinin tüm öğelerinin null olmaması gerektiği anlamına gelir.) Boş dize amacına teknik olarak izin verilir, ancak önerilmez.
İki amaçlı bağımsız değişken, yalnızca aynı dizeleri (sıralı karşılaştırıcı kullanarak) aynı sırada içeriyorsa eşdeğerdir. Tek amaçlı bağımsız değişken, karşılık gelen tek öğeli amaçlar dizisiyle eşdeğerdir.
İki
IDataProtector
nesne, yalnızca eşdeğer amaçlı parametrelerle eşdeğerIDataProtectionProvider
nesnelerden oluşturulduklarında eşdeğerdir.Belirli
IDataProtector
bir nesne içinUnprotect(protectedData)
çağrısı, yalnızca eşdeğerIDataProtector
bir nesne için ise ve iseprotectedData := Protect(unprotectedData)
özgünunprotectedData
değerini döndürür.
Dekont
Bazı bileşenlerin kasıtlı olarak başka bir bileşenle çakıştığı bilinen bir amaç dizesi seçmesi durumunu göz önünde bulundurmuyoruz. Bu tür bir bileşen temelde kötü amaçlı olarak kabul edilir ve bu sistem, kötü amaçlı kodun çalışan işleminin içinde zaten çalışıyor olması durumunda güvenlik garantileri sağlamak üzere tasarlanmamıştır.
ASP.NET Core