Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

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 = newWindowsPrincipal(currnentIdentity);

               AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

//Alternatif

WindowsPrincipal currentPrincipal2 = (WindowsPrincipal)Thread.CurrentPrincipal;

 

 

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

WindowsPrincipal currenntPrincipal = newWindowsPrincipal(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 = newPrincipalPermission(“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”)]

privatevoid AdministratorsOnlyMethod()

{

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

    //SecurityException fırlatır.

}

 

GenericIdentity myUser1 = newGenericIdentity(“User1”);

GenericIdentity myUser2 = newGenericIdentity(“User2”,“SmardCard”);

 

String[] myRoles = newString[]{“IT”,“Users”,“Administrators”};

 

GenericPrincipal myPrinciple = newGenericPrincipal(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”)]

privatevoid 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(newFileSystemAccessRule(“Guest”, FileSystemRights.Read, AccessControlType.Allow));

            Directory.SetAccessControl(dir, ds);

Reklamlar

Temmuz 12, 2010 - Posted by | C# | , , ,

1 Yorum »

  1. […] Ref:https://koraykirdinli.net/2010/07/12/user-and-data-security-kullanici-ve-veri-guvenligi/ Share this:TwitterFacebookLike this:BeğenBe the first to like this post. […]

    Pingback tarafından User and Data Security (Kullanıcı ve Veri Güvenliği) « msaishere | Haziran 4, 2012 | Cevapla


Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s