C# SecureString Sınıfı
Github'da yer alan bir projeyi incelerken bugünkü blog yazısına konu çıkan SecureString sınıfının kullanıldığını gördüm. Daha önce hiç bir projede kullanmadım ve kullananı da görmedim açıkcası.
Ben de bu sınıfı araştırdıktan sonra aslında güvenlik ile ilgili önemli bir konu olduğunu gördüğüm için ilk defa duyacaklar için bir yazı yazmak istedim.
Secure String Class Ne Ola ?
Öncelikle siz bir String nesnesi yaratıp içine parola veya kredi kartı no gibi arz eden bilgiler verdiniz. Bu nesneyi gerekli yerlerde kullandınız ve işiniz bitti. Nesne şuan belleğin head alanında duruyor. Bir süre bu nesneyi kullanmadınız ve ünlü garbage collector (çöp toplayıcısı) herhangi bir zamanda gelecek , optimizasyon adına heap alanında ki string nesnesine ait referansı silecek. Fakat buradan silinmesi başka yerde referansı olmayacağı anlamına gelmiyor -burası önemli.
Üstte yazan temel senaryoda sıkıntılar var ! Birincisi Garbage Collector 'un ne zaman çalışacağı belli değil. İkincisi bu nesneler bilgisayar açık olduğu sürece bellekten tam olarak silinmeyecek. Ve bu durumda hacker arkadaşlarımızın bilgilere bir şekilde ulaşabileceği anlamına geliyor.
Secure String Class Kullanımı
Üstte yazan mantığı anladıysak şimdi Secure String bize ne avantaj sağlıyor ona bakalım. Şu işlemleri bizim için otomatik olarak yapacaktır ;
- Şifreler (Encryption)
- Belleğe Sabitler (garbage collector'un taşımasını engeller) (pinned in memory)
- Salt Okunur Yapar (Read Only)
- Bellekten Tamamen Silinebilir
Ek olarak ; Sealed tanımlanmış bir class dır. Inheritance yapılamaz. System.Security namespace içerisindedir.
Kullanım Örneği
Yeni yazılarda görüşmek üzere , sağlıcakla
Kaynaklar
https://msdn.microsoft.com/tr-tr/library/system.security.securestring(v=vs.110).aspx
http://www.codeproject.com/Tips/549109/Working-with-SecureString
Öncelikle teşekkürler. Bu konuda türkçe kaynak bulamıyordum.
YanıtlaSilpublic static class SettingsAndPasswords
{
public static string PwdServer = "1234.";
public static string PwdZip = "1234";
public static string Color = "1234";
.
.
}
Yukarıdaki bir classtan ihtiyaç oldukça sabit verileri çekiyorum. Uygulama bellekteyken güvenlik açığı oluşuyor anladığım kadarıyla. Bu sabit stringleri SecureString olarak nasıl saklayacağımı anlayamadım. Secure string sınıfına atmadan önce yine kodlarda derleme öncesi düz string olarak tanımlamış olacağım mecburen. Biraz karışık geldi. Fikir verirseniz sevinirim. Kolay gelsin.