Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Kami menyarankan agar Anda tidak menggunakan SecureString kelas untuk pengembangan baru di .NET (Core) atau saat Anda memigrasikan kode yang ada ke .NET (Core). Untuk informasi selengkapnya, lihat SecureString tidak boleh digunakan.
Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.
SecureString adalah jenis string yang menyediakan ukuran keamanan. Ini mencoba untuk menghindari penyimpanan string yang berpotensi sensitif dalam memori proses sebagai teks biasa. (Namun, untuk batasan, lihat bagian Seberapa aman SecureString? ) Nilai instans SecureString secara otomatis dilindungi menggunakan mekanisme yang didukung oleh platform yang mendasar ketika instans diinisialisasi atau ketika nilai dimodifikasi. Aplikasi Anda dapat merender instans yang tidak dapat diubah dan mencegah modifikasi lebih lanjut dengan memanggil MakeReadOnly metode .
Panjang SecureString maksimum instans adalah 65.536 karakter.
Penting
Jenis ini mengimplementasikan antarmuka IDisposable. Setelah selesai menggunakan instance dari jenis, Anda harus menghapusnya baik secara langsung maupun tidak langsung. Untuk meniadakan tipe secara langsung, panggil metode Dispose dalam blok try/catch. Untuk membuangnya secara tidak langsung, gunakan konstruksi bahasa seperti using (dalam C#) atau Using (di Visual Basic). Untuk informasi selengkapnya, lihat bagian "Menggunakan Objek yang Menerapkan IDisposable" dalam IDisposable topik antarmuka.
Kelas SecureString dan anggotanya tidak terlihat oleh COM. Untuk informasi selengkapnya, lihat ComVisibleAttribute .
String versus SecureString
Instans System.String kelas tidak dapat diubah dan, ketika tidak lagi diperlukan, tidak dapat dijadwalkan secara terprogram untuk pengumpulan sampah; yaitu, instans bersifat baca-saja setelah dibuat, dan tidak mungkin untuk memprediksi kapan instans akan dihapus dari memori komputer. Karena instans System.String bersifat tidak dapat diubah, operasi yang terlihat memodifikasi instans yang ada sebenarnya membuat salinan darinya untuk dimanipulasi. Akibatnya, jika String objek berisi informasi sensitif seperti kata sandi, nomor kartu kredit, atau data pribadi, ada risiko informasi dapat terungkap setelah digunakan karena aplikasi Anda tidak dapat menghapus data dari memori komputer.
Objek SecureString mirip dengan objek String karena memiliki nilai teks. Namun, nilai SecureString objek disematkan dalam memori, dapat menggunakan mekanisme perlindungan seperti enkripsi yang disediakan oleh sistem operasi yang mendasarinya, dapat dimodifikasi sampai aplikasi Anda menandainya sebagai baca-saja, dan dapat dihapus dari memori komputer baik oleh aplikasi Anda yang memanggil metode Dispose atau oleh pembersih sampah .NET.
Untuk diskusi tentang batasan SecureString kelas, lihat bagian Seberapa aman SecureString? .
Operasi SecureString
Kelas ini SecureString mencakup anggota yang memungkinkan Anda melakukan hal berikut:
Menginstansiasi suatu objek SecureString Anda menginstansiasi objek SecureString dengan memanggil konstruktor tanpa parameter.
Tambahkan karakter ke objek SecureString Anda dapat menambahkan satu karakter satu per satu ke objek SecureString dengan memanggil metode AppendChar atau InsertAt.
Penting
Objek SecureString tidak boleh dibangun dari String, karena data sensitif sudah tunduk pada konsekuensi persistensi memori dari kelas yang tidak dapat String diubah. Cara terbaik untuk membuat objek SecureString adalah dari sumber tanpa pengelolaan karakter-per-karakter, seperti metode Console.ReadKey.
Hapus karakter dari SecureString objek Anda dapat mengganti karakter individual dengan memanggil SetAt metode , menghapus karakter individual dengan memanggil RemoveAt metode , atau menghapus semua karakter dari SecureString instans dengan memanggil Clear metode .
Jadikan objek SecureString bersifat hanya-baca Setelah Anda menentukan string yang diwakili oleh objek SecureString, panggil metode MakeReadOnly untuk menjadikan string tersebut bersifat hanya-baca.
Dapatkan informasi tentang SecureString objek Kelas SecureString hanya memiliki dua anggota yang memberikan informasi tentang string: propertinya Length , yang menunjukkan jumlah unit kode yang dikodekan UTF16 dalam string; dan IsReadOnlymetode , yang menunjukkan apakah instans bersifat baca-saja.
Lepaskan memori yang dialokasikan ke instans SecureString. Karena SecureString mengimplementasikan antarmuka IDisposable, Anda merilis memorinya dengan memanggil metode Dispose.
Kelas SecureString tidak memiliki anggota yang memeriksa, membandingkan, atau mengonversi nilai SecureString. Tidak adanya anggota tersebut membantu melindungi nilai instance dari paparan yang tidak disengaja atau berbahaya. Gunakan anggota kelas System.Runtime.InteropServices.Marshal yang sesuai, seperti metode SecureStringToBSTR untuk memanipulasi nilai objek SecureString.
Pustaka Kelas .NET biasanya menggunakan instans SecureString dengan cara berikut:
Untuk memberikan informasi kata sandi ke proses dengan menggunakan struktur ProcessStartInfo atau dengan memanggil overload Process.Start yang memiliki parameter tipe SecureString.
Untuk memberikan informasi kata sandi jaringan dengan memanggil konstruktor kelas NetworkCredential yang memiliki parameter bertipe SecureString atau dengan menggunakan properti NetworkCredential.SecurePassword.
Untuk memberikan informasi kata sandi untuk Autentikasi SQL Server dengan memanggil SqlCredential.SqlCredential konstruktor atau mengambil nilai SqlCredential.Password properti.
Untuk meneruskan string ke kode yang tidak dikelola. Untuk informasi selengkapnya, lihat bagian SecureString dan interop .
SecureString dan interop
Karena sistem operasi tidak secara langsung mendukung SecureString, Anda harus mengonversi nilai SecureString objek ke jenis string yang diperlukan sebelum meneruskan string ke metode asli. Kelas Marshal ini memiliki lima metode yang melakukan ini:
Marshal.SecureStringToBSTR, yang mengonversi SecureString nilai string menjadi string biner (BSTR) yang dikenali oleh COM.
Marshal.SecureStringToCoTaskMemAnsi dan Marshal.SecureStringToGlobalAllocAnsi, yang menyalin SecureString nilai string ke string ANSI dalam memori yang tidak dikelola.
Marshal.SecureStringToCoTaskMemUnicode dan Marshal.SecureStringToGlobalAllocUnicode, yang menyalin nilai dari string SecureString ke string Unicode dalam memori yang tidak dikelola.
Masing-masing metode ini membuat string teks yang jelas dalam memori yang tidak dikelola. Tanggung jawab pengembang adalah untuk menghapus dan membebaskan memori tersebut segera setelah tidak lagi diperlukan. Masing-masing metode konversi string dan alokasi memori memiliki metode yang sesuai untuk mengeset nilai menjadi nol dan membebaskan memori yang telah dialokasikan.
Seberapa aman SecureString?
Saat dibuat dengan benar, instans SecureString memberikan perlindungan data yang lebih banyak daripada String. Saat membuat string dari sumber karakter satu per satu, String membuat beberapa objek sementara dalam memori, sedangkan SecureString hanya membuat satu instansi. Pengumpulan String sampah objek tidak deterministik. Selain itu, karena memorinya tidak disematkan, pengumpul sampah akan membuat salinan tambahan dari nilai-nilai String saat memindahkan dan memampatkan memori. Sebaliknya, memori yang dialokasikan untuk objek SecureString dipin, dan memori tersebut dapat dibebaskan dengan memanggil metode Dispose.
Meskipun data yang disimpan dalam instans SecureString lebih aman daripada data yang disimpan dalam instans String, ada batasan signifikan pada keamanan instans SecureString. Ini termasuk:
Plattform
Pada sistem operasi Windows, konten dari array karakter internal sebuah instans SecureString dienkripsi. Namun, apakah karena API yang hilang atau masalah manajemen kunci, enkripsi tidak tersedia di semua platform. Karena dependensi platform ini, SecureString tidak mengenkripsi penyimpanan internal pada platform non-Windows. Teknik lain digunakan pada platform tersebut untuk memberikan perlindungan tambahan.
Durasi
Bahkan jika SecureString implementasi dapat memanfaatkan enkripsi, teks biasa yang ditetapkan ke SecureString instans dapat diekspos pada berbagai waktu:
Karena Windows tidak menawarkan implementasi string aman di tingkat sistem operasi, .NET masih harus mengonversi nilai string aman ke representasi teks biasanya untuk menggunakannya.
Setiap kali nilai string aman dimodifikasi oleh metode seperti AppendChar atau RemoveAt, itu harus didekripsi (yaitu, dikonversi kembali ke teks biasa), dimodifikasi, dan kemudian dienkripsi lagi.
Jika string aman digunakan dalam panggilan interop, string harus dikonversi ke string ANSI, string Unicode, atau string biner (BSTR). Untuk informasi selengkapnya, lihat bagian SecureString dan interop .
Nilai instans SecureString diekspos dalam interval waktu yang lebih singkat, dibandingkan dengan kelas String.
Penyimpanan versus penggunaan Lebih umum, SecureString kelas menentukan mekanisme penyimpanan untuk nilai string yang harus dilindungi atau dirahasiakan. Namun, di luar .NET itu sendiri, tidak ada mekanisme penggunaan yang mendukung SecureString. Ini berarti bahwa string aman harus dikonversi ke bentuk yang dapat digunakan (biasanya bentuk teks yang jelas) yang dapat dikenali oleh targetnya, dan dekripsi dan konversi harus terjadi di ruang pengguna.
Secara keseluruhan, SecureString lebih aman daripada String karena membatasi paparan data string sensitif. Namun, string tersebut mungkin masih terekspos ke proses atau operasi apa pun yang memiliki akses ke memori mentah, seperti proses berbahaya yang berjalan di komputer host, cadangan proses, atau file pertukaran yang dapat dilihat pengguna. Alih-alih menggunakan SecureString untuk melindungi kata sandi, alternatif yang direkomendasikan adalah menggunakan handel buram ke kredensial yang disimpan di luar proses.