C# Uygulama Güvenliği

Ağustos 5, 2011

Merhaba uzun zamandır paylaşım yapamamamdan dolayı bugün güzel bir konu yazmaya karar verdim ve güvenlikle ilgili bir konu aklıma gelmişken paylaşmak istedim.Arkadaşlar bugüne kadar bir çok uygulama yazmışızdır veya yazmayada devam ediyoruz ama bu uygulamalarda sizce güvenliğe ne kadar önem veriyoruz.Bugün şöyle bir senaryoyu düşünelim.Örneğin : Bir kullanıcı sizden sadece kendisi için bir program yazmanızı istedi ve sizde hızlıca başladınız ve 2 haftaya küçük ölçekli olan programı bitirdiniz güzel ama burada kullanıcı sizden şöyle bir şey isterse bu yazdığınız programın sadece ama sadece kendi kullanabilecegi şekile getirmenizi ? hemen aklınıza login formu hazırlarlamak gelmiş olabilir ben size daha kolay ve profesyonel olan bir yol göstermek istiyorum.

 

 

Böyle bir durumda kullanıcının flash belleğiyle çok daha ileri düzey bir koruma sağlayabiliriz.Flash bellek derken aslında kullanıcının flash belleği ile çok ta fazla bir işimiz yok sadece kullanıcının flash belleğinin Id sini alsak ve program her açılmaya çalışıldığı zaman bu Id li flash bellek bilgisayara takılımı diye kontrol etsek sanki daha güvenli bir uygulama geliştirmiş oluruz.Bu işlemi yapmadan önce her belleğin kendine özel benzersiz bir Id si olduğunu unutmayalım yani kullanıcıdaki flash bellekten sadece 1 tabe var o Id ye sahip.Şimdi isterseniz bir tane form tasarlayalım ve bilgisayarımızdaki bulunan disk ‘ leri comboBox’a isimlerini aktaralım.İlk olarak standart bir tane form uygulaması oluşturalım ben adına guvenlik2 olarak verdim siz istediğinizi verebilirsiniz daha sonra  using kısmına gerekli sınıflarımızı ekleyelim.

 

 

System.Management sınıfımızda ekledikten sonra form tasarımımıza geçelim ve basit bir form tasarlayalım ben karmaşık olmasın diye sadece forma groupBox içinde 2 tane label , comboBox ve textBox ekledim.

 

 

Sürücüler yazan comboBox ‘ ımıza formun Load olayında o anda bilgisayarınızdaki sürücüleri listeleyelim bunun için alttaki kodları yazıyoruz.

 

 

ManagementObjectSearcher yardımı ile içinde sql sorguları çalıştırarak bilgisayarımızdaki bir çok özelliğe ulaşabiliriz.Bu konu geniş olduğu için onu sonraki yazılara bırakarak programımıza devam edelim bu satırda bilgisayarımızdaki disk ‘ leri aldık ms değişkenimize aktardık.Bu değişkenimizdeki bilgilerin Model bilgilerini comboBox ‘ a aktarabilmek için foreach döngüsüne sokuyoruz ve ms değişkenimizdeki bilgileri comboBox ‘ın Items özelliğine ekliyoruz Add method’unu kullanarak.item["Model"]  yazmamızın sebebi ekrana sadece Model bilgilerini getirmek istememiz.Şu anda comboBox’ımıza disk’ler listeleniyor.Şimdi comboBox’ımızın SelectedIndexChanged event’inde kullanıcının seçtiği modelli diskin PNPDeviceID bilgisini alıp textBox’ımıza yazacağımız kodlarımızı yazalım.

 

 

Arkadaşlar bu seferde sorgumuzu comboBox’ta seçilen Item ‘ a göre hazırlıyoruz ve  sadece Model ‘ leri sorguluyoruz ve comboBox’ta seçtiğimiz disk’in PNPDeviceID bilgisini textBox’a yazdırıyoruz.

 

 

Ekranda benim Toshiba flash diskimin PNPDeviceID si görünüyor.Tabiki biz uygulamamızda kendi flash diskimizin PNPDeviceID bilgisini almıcaz asıl kullanıcının flash diskinin PNPDeviceID bilgisini alıcaz ki açılışta bu disk bilgisayara takılımı diye kontrol edelim takılı ise uygulamamız çalışsın takılı değil ise uygulamamız çalışmasın.Bunu sağlamak için programımızın en uygun kısmı program.cs dosyasıdır şimdi yazacağımız kodları program.cs class ‘ ının içine yazıyoruz.

 

 

İlk olarak bulduğumuz PNPDeviceID değerini bilgisayarda takılımı diye kontrol eden bir method yazıyoruz ve geriye bool değer döndürüyor bool demek geriye true veya false döndürecek anlamına gelmektedir.Bu method içinde bilgisayardaki takılı olan disklerin bir listesini alıyoruz ve bu listede bulunan disklerin PNPDeviceID ‘ lerine ulaşıyoruz ve bizim elimizdeki PNPDeviceID ile karşılaştırıyoruz ve karşılaşma olumlu ise getire true bir değer döndürüyoruz eğer bizim elimizdeki PNPDeviceID ile bilgisayarda takılı olan disklerden herhangi bir tanesi uyuşmuyor ise kullanıcının flash diski bilgisayara takılı değildir bizde bunun için Kontrol method’umuzdan geriye false değerini döndürüyoruz.En son olarakta Application.Run kısmını düzenlememiz gerekmektedir orada sadece bir if kontrolüne ihtiyacımız var bu if içinde Kontrol method’umuzdan geriye nasıl bir değer döndüğüne bakıyoruz eğer değer true ise kullanıcının flash diski bilgisayara takılıdır ve bizde programı çalıştırıyoruz ama Kontrol method’undan geriye false dönerse kullanıcının flash disk’i bilgisayarımıza takılı değildir o zaman if kontrolünden geçemediği için uygulama çalışmayacaktır.Son olarak genel bir açıklama yapacak olursak kullanıcıdan bir tane flash aldık sonra bu flash ‘ ın PNPDeviceID değerini aldık ve programın her açılışında kontrol ettik eğer bilgisayarda takılı olan disk’lerden herhangi birisinin PNPDeviceID değeri eşleşiyor ise uygulamamızı çalıştırdık , uyuşmuyor ise uygulamamızı çalıştırmadık.Bu şekilde yazdığınız uygulama sadece kullanıcının kendindeki flash bilgisayara takılı ise çalışacaktır takılı değil ise uygulamanız çalışmayacaktır.Programı ilk çalıştırdığınız zaman sorunsuz bir şekilde çalışacaktır açılan formda kendi flash diskinizin PNPDeviceID değerini bulun ve program.cs dosyasındaki gerekli kısımla değiştirin eğer bu değişikligi yapmadan bir üstteki if kontrolünü aktif ederseniz program benim flash diskimin PNPDeviceID değerini arayacagı için sizin bilgisayarınızda çalışmayacaktır.İyi çalışmalar.

 

 

 

Kaynak Kodları Buradan İndirebilirsiniz

 

 

 

 

posted in C# by gokhan

Follow comments via the RSS Feed | Yorum yapın | Trackback URL

Leave Your Comment

*

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org