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);

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

1 Comment »

  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 by User and Data Security (Kullanıcı ve Veri Güvenliği) « msaishere | June 4, 2012 | Reply


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s