Aracılığıyla paylaş


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.

Purpose Diagram Example

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 , IDataProtectorve amaçlarının IDataProtectionProviderdavranışları aşağıdaki gibidir:

  • Belirli IDataProtectionProvider bir nesne için CreateProtector yöntemi, hem onu oluşturan nesneye hem de IDataProtectionProvider yönteme geçirilen purposes parametresine benzersiz olarak bağlı bir IDataProtector 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ğer IDataProtectionProvider nesnelerden oluşturulduklarında eşdeğerdir.

  • Belirli IDataProtector bir nesne için Unprotect(protectedData) çağrısı, yalnızca eşdeğer IDataProtector bir nesne için ise ve ise protectedData := Protect(unprotectedData) özgün unprotectedData 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.