User and Data Security (Kullanıcı ve Veri Güvenliği)

     Bu makalede kullanıcı bazlı veri güvenliği konusuna değineceğiz. Örneğin bir uygulamada kullanıcılar sadece kendi verilerini görür , yönetici bütün verileri görür , authenticate olmamış bir kullanıcı ise hiçbir veriyi göremez gibi kısıtlar koyulması gerekebilir. Role-Based Security diye tabir edilen kontrol sistemi yardımıyla bunu gerçekleştirmek mümkündür.RBS yi ister lokal kullacı veritabanı ile ister active directory ile istersek de custom kullanıcı tabloları ile gerçekleştirebiliriz. Ayrıca bu kritik verileri daha güvenli hale getirmek için encrypted olarak tutmakta yarar vardır. Bu makalede iki kavram üzerine yoğunlaşacağız. Bunlardan birisi Authentication diğeri ise Authırization. Peki ikisinin arasındaki fark nedir.

Authentication(Kimlik Doğrulama) : Kullanıcının kimliğini kontrol etmek.

Authorization(Yetki , izin) : Kullanıcını kaynaklara erişimini doğrulamak.

Bir kullanıcı sisteme giriş yapabilmek için authentication , o sistemde bir işlem yapabilmek için authorization ‘a ihtiyaç duyar.

Eğer kullanıcılar için lokal user veritabanını veya activedirectory’i kullanırsak .NET Framework içerisindeki WindowsIdentity ve WindowsPrincipal sınıfları ile entegre edebiliriz. Eğer kendi user veritabanımızı kullanırsak da GenericIdentity ve GenericPrincipal sınıflarını entegre edebiliriz.

Eğer tam bir kontrol istiyorsak IIdentity ve IPrinciple interface’lerinden implemente edebiliriz.

 

System.Security.Principal.WindowsIdentity sınıfı windows user accountu temsil eder. Bu sınıf tan bir instanse oluşturabilmek için GetAnonmous,GetCurrent,Impersonate metodlarından biri çağrılır.
GetAnonymous (Anonim) : Kimlik doğrulaması yapılmamış windows userını temsil eder.
GetCurrent : O andaki windows userını temsil eder.

Impersonate : Belirtilen userın WindowsImpersonationIdentityContext nesnesi döndürür.


WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent();

Console.WriteLine("Name:" + currentIdentity.Name);

Console.WriteLine("Token:" + currentIdentity.Token);

Console.WriteLine("Authentication Type:" + currentIdentity.AuthenticationType);

 

if (currentIdentity.IsAnonymous) MessageBox.Show("Anonim Kullanıcı");

if (currentIdentity.IsAuthenticated) MessageBox.Show("Kimlik Doğrulaması Yapılmamış");

if (currentIdentity.IsGuest) MessageBox.Show("Guest kullanıcısı");

if (currentIdentity.IsSystem) MessageBox.Show("Sistem kullanıcısı");

 

//Windows Principal

WindowsIdentity currnentIdentity = WindowsIdentity.GetCurrent();

WindowsPrincipal currentPrinciple = new WindowsPrincipal(currnentIdentity);

               AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

//Alternatif

WindowsPrincipal currentPrincipal2 = (WindowsPrincipal)Thread.CurrentPrincipal;

 

 

//Windowsa giriş yapan kullanıcı Admin mi

WindowsPrincipal currenntPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());

bool IsAdmin = currenntPrincipal.IsInRole(WindowsBuiltInRole.Administrator);

MessageBox.Show(IsAdmin.ToString());

 

System.Security.Permissions.PrincipalPermissino sınıfı PermissionAttribute sınıfı ile birlikte güvenlik prensiplerini uygulamaya yarar.PrinciplePermission un 3 önemli property si vardır.

Authenticated : true olursa kullanıcı authenticate olmaya ihtiyaç duyar.

Name : User Name ile aynı olması gerekir.

Role : Principal Role lerden biri ile aynı olması gerekir.

rincipalPermission p = new PrincipalPermission("name", "role", true);

Examtip : PrinciplePermission 3 property si var . Fullname,phone gibi özellikler bu sınıfa ait değil.

 

 

[PrincipalPermission(SecurityAction.Demand,Role=@"BUILTINAdministrators")]

private void AdministratorsOnlyMethod()

{

    //Bu metodu sadece Adminler çalıştırabilir. Eğer Admin değilse

    //SecurityException fırlatır.

}

 

GenericIdentity myUser1 = new GenericIdentity("User1");

GenericIdentity myUser2 = new GenericIdentity("User2","SmardCard");

 

String[] myRoles = new String[]{"IT","Users","Administrators"};

 

GenericPrincipal myPrinciple = new GenericPrincipal(myUser1, myRoles);

 

bool HasUserRole = myPrinciple.IsInRole("Users");

MessageBox.Show(HasUserRole.ToString());


Thread.CurrentPrincipal = myPrinciple1;

TestSecurity(); //User1 IT Userı olduğu için bu metodu çağırabilir

Thread.CurrentPrincipal = myPrinciple2;

TestSecurity(); //User2 IT Userı olmadığı için bu metod runtime da hata verir.


[PrincipalPermission(SecurityAction.Demand,Role="IT")]

private void TestSecurity()

{

    MessageBox.Show(Thread.CurrentPrincipal.Identity.Name+" is IT User");

}

 

 

Access Control List (ACS) : Dosyalara,klasörlere,printerlara,servislere,registery’e ve diğer işletim sistemi kaynaklarına erişim ACL tekniği tarafından kısıtlanabilir.


//Bir dizine Access Rule Vermek

            string dir = @"C:test";

            DirectorySecurity ds = Directory.GetAccessControl(dir);

            ds.AddAccessRule(new FileSystemAccessRule("Guest", FileSystemRights.Read, AccessControlType.Allow));

            Directory.SetAccessControl(dir, ds);

Yorum Yaz
Arkadaşların Burada !
Arkadaşların Burada !