.NET güvenlik gerçekten nasıl çalışır?

oy
1

Sadece bu soruyu gördü:

izinleri için NET'in “SecurityAction” parametresini anlama

Ve bir sorum var. Aşağıdaki kod ile:

private void button1_Click(object sender, EventArgs e)
{
    Layer1();
    MessageBox.Show(OK);
}

private void Layer1()
{
    try
    {
        Layer2();
    }
    catch (SecurityException)
    {
        MessageBox.Show(Caught);
    }
    Layer2b();
}

private void Layer2()
{
    new System.Security.Permissions.FileIOPermission(PermissionState.Unrestricted).Deny();
    GC.Collect();
    Layer3();
}

private void Layer2b()
{
    Layer3();
}

[FileIOPermission(SecurityAction.LinkDemand, Write=@C:\temp)]
private void Layer3()
{
    using (FileStream stream = new FileStream(@C:\temp\test.txt, FileMode.Create))
    {
    }
}

neden kodu için çağrı ile bir güvenlik özel üretir Layer2? Izin nesnesi tedavi edilir nasıl, ben buna aktif referansı olmadığı için çöp toplayıcısı, nesneyi yok edeceğini hayal ediyorum, ama kod diyor yakalandı ve sonra Tamam , bu yüzden açıkça izin inkar yürürlükte olduğu Layer2 aracılığıyla çağrı için.

Ne verir? Neyi kaçırıyorum? Bu soru gerçekten basit eğer öyleyse beni affet .NET güvenlik / izin sistemine geldiğinde bir toplam acemi olarak kabul edeceğiz.

Bu bayrağın yığını falan gibi bir güvenlik izni / reddi mu? Aksi halde, neden Layer2b için geçerli değil mi? Bu atık toplama işlemi tarafından öldürülen etmemesine karşın bu / tahrip / çıkarılmış bir noktada temizlenmiş oluyor, çok net, aynı iş parçacığı var.

Oluştur 09/12/2008 saat 23:25
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
3

Bir CodeAccessPermission üzerinde .Deny () çağrılması .NET Güvenlik çalışma zamanı o izin geçerli yığın çerçeve için güvenlik nesne üzerinde inkar bayrağı oluşturulmasına yol açacaktır. Eğer .Deny () () çağrıldıktan sonra GC.Collect çağrı Yani bile gerçekten fark, izin yürürlükte kalacak değil. İzinli bir amacı bir zaman noktasında (yığın çerçeve) .NET güvenlik çalışma parçası durumunun bir temsilidir.

Daha fazla bilgi edinmek için .NET yansıtıcı kullanın.

Cevap 09/12/2008 saat 23:39
kaynak kullanıcı

oy
0

İlk bakışta üzerine, bunun yönteminin içine tanımlanır olarak izin nesnesi, kapsamı hala olduğunu tahmin ediyorum, bu nedenle çalışması için başvurunuzun son satırı izin Layer2 yönteminin tamamlanmasının ardından kapsamı dışında kalmaktadır.

kabul edilen yanıt ile belirtildiği gibi mevcut yığın için kapsam içindedir çünkü bu standart nesne kapsamı ile ilgili olduğunu, sadece referans yönetmek yoktur. İşte bu hatırlamak için en iyi yoldur

Cevap 09/12/2008 saat 23:36
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more