Bagikan melalui


String tujuan di ASP.NET Core

Komponen yang digunakan IDataProtectionProvider harus meneruskan parameter tujuan unik ke CreateProtector metode . Parameter tujuan melekat pada keamanan sistem perlindungan data, karena menyediakan isolasi antara konsumen kriptografi, bahkan jika kunci kriptografi akar sama.

Ketika konsumen menentukan tujuan, string tujuan digunakan bersama dengan kunci kriptografi akar untuk mendapatkan subkunci kriptografi yang unik untuk konsumen tersebut. Ini mengisolasi konsumen dari semua konsumen kriptografi lainnya dalam aplikasi: tidak ada komponen lain yang dapat membaca payloadnya, dan tidak dapat membaca payload komponen lain. Isolasi ini juga merender seluruh kategori serangan yang tidak layak terhadap komponen.

Purpose Diagram Example

Dalam diagram di atas, IDataProtector instans A dan B tidak dapat membaca payload satu sama lain, hanya milik mereka sendiri.

String tujuan tidak harus rahasia. Seharusnya hanya unik dalam arti bahwa tidak ada komponen berperilaku baik lainnya yang akan memberikan string tujuan yang sama.

Tip

Menggunakan namespace layanan dan nama jenis komponen yang menggunakan API perlindungan data adalah aturan praktis yang baik, karena dalam praktiknya informasi ini tidak akan pernah bertentangan.

Komponen yang ditulis Contoso yang bertanggung jawab untuk menambang token pembawa mungkin menggunakan Contoso.Security.BearerToken sebagai string tujuannya. Atau - bahkan lebih baik - mungkin menggunakan Contoso.Security.BearerToken.v1 sebagai string tujuannya. Menambahkan nomor versi memungkinkan versi mendatang untuk menggunakan Contoso.Security.BearerToken.v2 sebagai tujuannya, dan versi yang berbeda akan sepenuhnya terisolasi satu sama lain sejauh payload pergi.

Karena parameter tujuan adalah CreateProtector array string, yang di atas bisa saja ditentukan sebagai [ "Contoso.Security.BearerToken", "v1" ]. Hal ini memungkinkan pembentukan hierarki tujuan dan membuka kemungkinan skenario multi-penyewaan dengan sistem perlindungan data.

Peringatan

Komponen tidak boleh mengizinkan input pengguna yang tidak tepercaya menjadi satu-satunya sumber input untuk rantai tujuan.

Misalnya, pertimbangkan komponen Contoso.Messaging.SecureMessage yang bertanggung jawab untuk menyimpan pesan aman. Jika komponen olahpesan aman memanggil CreateProtector([ username ]), maka pengguna berbahaya mungkin membuat akun dengan nama pengguna "Contoso.Security.BearerToken" dalam upaya untuk mendapatkan komponen untuk memanggil CreateProtector([ "Contoso.Security.BearerToken" ]), sehingga secara tidak sengaja menyebabkan sistem olahpesan aman untuk memangkas payload yang dapat dianggap sebagai token autentikasi.

Rantai tujuan yang lebih baik untuk komponen olahpesan adalah CreateProtector([ "Contoso.Messaging.SecureMessage", $"User: {username}" ]), yang menyediakan isolasi yang tepat.

Isolasi yang disediakan oleh dan perilaku IDataProtectionProvider, , IDataProtectordan tujuannya adalah sebagai berikut:

  • Untuk objek tertentu IDataProtectionProvider , CreateProtector metode akan membuat objek yang IDataProtector secara unik terkait IDataProtectionProvider dengan objek yang membuatnya dan parameter tujuan yang diteruskan ke dalam metode .

  • Parameter tujuan tidak boleh null. (Jika tujuan ditentukan sebagai array, ini berarti bahwa array tidak boleh memiliki panjang nol dan semua elemen array harus non-null.) Tujuan string kosong secara teknis diizinkan tetapi tidak disarankan.

  • Argumen dua tujuan setara jika dan hanya jika berisi string yang sama (menggunakan perbandingan ordinal) dalam urutan yang sama. Argumen tujuan tunggal setara dengan array tujuan elemen tunggal yang sesuai.

  • Dua IDataProtector objek setara jika dan hanya jika dibuat dari objek yang setara IDataProtectionProvider dengan parameter tujuan yang setara.

  • Untuk objek tertentu IDataProtector , panggilan ke Unprotect(protectedData) akan mengembalikan yang asli unprotectedData jika dan hanya jika protectedData := Protect(unprotectedData) untuk objek yang setara IDataProtector .

Catatan

Kami tidak mempertimbangkan kasus di mana beberapa komponen sengaja memilih string tujuan yang diketahui bertentangan dengan komponen lain. Komponen seperti itu pada dasarnya akan dianggap berbahaya, dan sistem ini tidak dimaksudkan untuk memberikan jaminan keamanan jika kode berbahaya sudah berjalan di dalam proses pekerja.