ASP.NET Core Data Protection'a Genel Bakış
ASP.NET Core veri koruması, anahtar yönetimi ve döndürme dahil olmak üzere verileri korumak için bir şifreleme API'si sağlar.
Web uygulamalarının genellikle güvenliğe duyarlı verileri depolaması gerekir. Windows, DPAPI adlı bir veri koruma API'si sağlar, ancak Windows DPAPI web uygulamalarında kullanılmak üzere tasarlanmamıştır.
ASP.NET Core veri koruma yığını, ASP.NET 1.x - 4.x'te machineKey> öğesinin <uzun vadeli yerine geçecek şekilde tasarlanmıştır. Modern uygulamaların büyük olasılıkla karşılaşılabilecek kullanım örneklerinin çoğu için kullanıma hazır bir çözüm sağlarken eski şifreleme yığınının birçok eksikliğini gidermek için tasarlanmıştır.
Sorun bildirimi
Genel sorun deyimi tek bir cümlede kısaca belirtilebilir: Daha sonra almak için güvenilir bilgileri kalıcı hale getirmem gerekiyor, ancak kalıcılık mekanizmasına güvenmiyorum. Web terimleri açısından bu, "Güvenilmeyen bir istemci aracılığıyla güvenilir duruma gidiş dönüş gerekiyor" olarak yazılabilir.
Bunun kurallı örneği bir kimlik doğrulaması cookie veya taşıyıcı belirtecidir. Sunucu bir "Groot'um ve xyz izinlerine sahibim" belirteci oluşturur ve istemciye verir. Gelecekteki bir tarihte istemci bu belirteci sunucuya geri sunacaktır, ancak sunucunun istemcinin belirteci sahte yapmadığına dair bir güvenceye ihtiyacı vardır. Bu nedenle ilk gereksinim: orijinallik (bütünlük, kurcalama-yazım denetleme).
Kalıcı duruma sunucu tarafından güvenildiğinden, bu durumun işletim ortamına özgü bilgiler içerebileceğini tahmin ediyoruz. Bu, dosya yolu, izin, tanıtıcı veya başka bir dolaylı başvuru ya da sunucuya özgü başka bir veri parçası biçiminde olabilir. Bu tür bilgiler genellikle güvenilmeyen bir istemciye açıklanmamalıdır. Bu nedenle ikinci gereksinim: gizlilik.
Son olarak, modern uygulamalar bileşen haline getirildiğinden, tek tek bileşenlerin sistemdeki diğer bileşenlere bakılmaksızın bu sistemden yararlanmak isteyeceğini gördük. Örneğin, taşıyıcı belirteç bileşeni bu yığını kullanıyorsa, aynı yığını da kullanıyor olabilecek bir CSRF önleme mekanizmasının müdahalesi olmadan çalışmalıdır. Bu nedenle son gereksinim: yalıtım.
Gereksinimlerimizin kapsamını daraltmak için daha fazla kısıtlama sağlayabiliriz. Şifreleme sistemi içinde çalışan tüm hizmetlerin eşit derecede güvenilir olduğunu ve verilerin doğrudan denetimimiz altındaki hizmetlerin dışında oluşturulmasına veya tüketilmesine gerek olmadığını varsayıyoruz. Ayrıca, web hizmetine yapılan her istek şifreleme sisteminden bir veya daha fazla kez geçebileceğinden işlemlerin mümkün olduğunca hızlı olmasını zorunlu kılıyoruz. Bu, simetrik şifrelemeyi senaryomuz için ideal hale getirir ve asimetrik şifrelemeyi gereken zamana kadar indirime dönüştürebiliriz.
Tasarım felsefesi
Mevcut yığınla ilgili sorunları belirleyerek başladık. Bunu yaptıktan sonra mevcut çözümlerin ortamını gözden geçirdik ve mevcut hiçbir çözümün tam olarak istediğimiz özelliklere sahip olmadığı sonucuna vardık. Ardından çeşitli yol gösterici ilkelere dayalı bir çözüm tasarlamayı da yaptık.
Sistem, yapılandırmanın basitliğini sunmalıdır. İdeal olan sistemin sıfır yapılandırma olması ve geliştiricilerin çalışır durumda olmasıdır. Geliştiricilerin belirli bir yönü (anahtar depo gibi) yapılandırması gereken durumlarda, bu belirli yapılandırmaları basit hale getirmek için dikkate alınması gerekir.
Tüketiciye yönelik basit bir API sunar. API'lerin doğru kullanımı kolay ve yanlış kullanılması zor olmalıdır.
Geliştiricilerin temel yönetim ilkelerini öğrenmesi gerekmez. Sistem, algoritma seçimini ve anahtar ömrünü geliştirici adına işlemelidir. İdeal olan geliştiricinin ham anahtar malzemesine asla erişmemesidir.
Anahtarlar mümkün olduğunda bekleyenler için korunmalıdır. Sistem uygun bir varsayılan koruma mekanizması bulmalı ve otomatik olarak uygulamalıdır.
Bu ilkeleri göz önünde bulundurarak basit, kullanımı kolay bir veri koruma yığını geliştirdik.
ASP.NET Core veri koruma API'leri öncelikli olarak gizli yüklerin süresiz kalıcılığına yönelik değildir. Windows CNG DPAPI ve Azure Rights Management gibi diğer teknolojiler, süresiz depolama senaryosuna daha uygundur ve buna karşılık güçlü anahtar yönetimi özelliklerine sahiptir. Buna göre, bir geliştiricinin gizli verilerin uzun süreli korunması için ASP.NET Core veri koruma API'lerini kullanmasını yasaklayan hiçbir şey yoktur.
Hedef Kitle
Veri koruma sistemi beş ana pakete ayrılmıştır. Bu API'lerin çeşitli yönleri üç ana kitleyi hedefler;
Tüketici API'lerine Genel Bakış hedef uygulama ve çerçeve geliştiricileri.
"Yığının nasıl çalıştığı veya nasıl yapılandırıldığı hakkında bilgi edinmek istemiyorum. Api'leri başarılı bir şekilde kullanma olasılığının yüksek olmasıyla bazı işlemleri mümkün olduğunca basit bir şekilde gerçekleştirmek istiyorum."
Yapılandırma API'leri uygulama geliştiricilerini ve sistem yöneticilerini hedefler.
"Veri koruma sistemine ortamımın varsayılan olmayan yollar veya ayarlar gerektirdiğini söylemem gerekiyor."
Genişletilebilirlik API'leri, özel ilke uygulamaktan sorumlu geliştiricileri hedefler. Bu API'lerin kullanımı nadir durumlarla ve deneyimli, güvenlikle ilgili geliştiricilerle sınırlı olacaktır.
"Sistemdeki bir bileşenin tamamını değiştirmem gerekiyor çünkü gerçekten benzersiz davranış gereksinimlerim var. Gereksinimlerimi karşılayan bir eklenti oluşturmak için API yüzeyinin yaygın olarak kullanılan bölümlerini öğrenmeye hazırım."
Paket düzeni
Veri koruma yığını beş paket içerir.
Microsoft.AspNetCore.DataProtection.Abstractions, veri koruma hizmetleri oluşturmak için ve IDataProtector arabirimlerini içerirIDataProtectionProvider. Ayrıca, bu türlerle çalışmak için kullanışlı uzantı yöntemleri de içerir (örneğin, IDataProtector.Protect). Veri koruma sistemi başka bir yerde örneği oluşturulursa ve API'yi kullanıyorsanız başvurusuna başvurun
Microsoft.AspNetCore.DataProtection.Abstractions
.Microsoft.AspNetCore.DataProtection ; çekirdek şifreleme işlemleri, anahtar yönetimi, yapılandırma ve genişletilebilirlik dahil olmak üzere veri koruma sisteminin temel uygulamasını içerir. Veri koruma sisteminin örneğini (örneğin, bir IServiceCollectionöğesine eklemek) veya davranışını değiştirmek veya genişletmek için başvurusu
Microsoft.AspNetCore.DataProtection
.Microsoft.AspNetCore.DataProtection.Extensions, geliştiricilerin yararlı bulabileceği ancak çekirdek pakete ait olmayan ek API'ler içerir. Örneğin, bu paket, anahtarları bağımlılık eklemeden dosya sistemindeki bir konumda depolamak için veri koruma sisteminin örneğini oluşturmak için fabrika yöntemlerini içerir (bkz DataProtectionProvider. ). Ayrıca korumalı yüklerin ömrünü sınırlamak için uzantı yöntemleri de içerir (bkz ITimeLimitedDataProtector. ).
Microsoft.AspNetCore.DataProtection.SystemWeb , işlemlerini yeni ASP.NET Core veri koruma yığınını kullanacak şekilde yeniden yönlendirmek
<machineKey>
için mevcut bir ASP.NET 4.x uygulamasına yüklenebilir. Daha fazla bilgi için bkz . ASP.NET Core'da ASP.NET machineKey'i değiştirme.Microsoft.AspNetCore.Cryptography.KeyDerivation , PBKDF2 parola karma yordamının bir uygulamasını sağlar ve kullanıcı parolalarını güvenli bir şekilde işlemesi gereken sistemler tarafından kullanılabilir. Daha fazla bilgi için bkz . ASP.NET Core'da karma parolalar.
Ek kaynaklar
ASP.NET Core
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin