Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# для профСссионалов. Π’ΠΎΠΌ IIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 110

Автор Π‘ΠΈΠΌΠΎΠ½ Робинсон

Π’Ρ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠ· Ρ„Π°ΠΉΠ»Π° AssemblyInfo.cs (см. Π½ΠΈΠΆΠ΅) Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ использованиС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² для запроса ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ. Π­Ρ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ SecurityАрр9 срСди Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… с сайта ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Wrox Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π²Ρ‹Π΄Π²ΠΈΠ³Π°Π΅Ρ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сборка ΠΈΠΌΠ΅Π»Π° UIPermission, Ρ‡Ρ‚ΠΎ даст ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ доступ ΠΊ интСрфСйсу ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Запрос дСлаСтся для ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ, Π° Ссли это ΠΏΡ€Π°Π²ΠΎ Π½Π΅ прСдоставляСтся, Ρ‚ΠΎ сборка Π½Π΅ смоТСт Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ.

Using System.Security.Permissions;

[assembly:UIPermissionAttribute(SecurityAction.RequestMimimum)]

Π—Π°Ρ‚Π΅ΠΌ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ, отказываСтся Π»ΠΈ сборка ΠΎΡ‚ доступа ΠΊ диску C:\ . Настройка Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для всСй сборки Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ доступ ΠΊ этому диску:

[assembly:FileIOPermissionAttribute(SecurityAction.RequestRefuse, Read="C:\\")]

НиТС Π΄Π°Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ для сборки Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ полномочия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ доступ ΠΊ нСуправляСмому ΠΊΠΎΠ΄Ρƒ:

[assembly:SecurityPermissionAttribute(SecurityAction.RequestOptional,

 Flags = SecurityPermissionFlag.UnmanagedCode)]

Π’ Π΄Π°Π½Π½ΠΎΠΌ сцСнарии ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ обращаСтся ΠΊ нСуправляСмому ΠΊΠΎΠ΄Ρƒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΡ‹ опрСдСляСм, Ρ‡Ρ‚ΠΎ это ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠ΅ являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, прСдполагая, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π±Π΅Π· полномочия доступа ΠΊ нСуправляСмому ΠΊΠΎΠ΄Ρƒ. Если сборкС Π½Π΅ прСдоставлСны ΠΏΡ€Π°Π²Π° для доступа ΠΊ нСуправляСмому ΠΊΠΎΠ΄Ρƒ ΠΈ ΠΎΠ½Π° попытаСтся это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ SecurityException, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ соотвСтствСнно ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ.

ΠŸΡ€ΠΈ рассмотрСнии Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ для прилоТСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… возмоТностСй:

β–‘ Π—апрос всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ Π² Π½Π°Ρ‡Π°Π»Π΅ выполнСния ΠΈ постСпСнноС сниТСниС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄, Ссли эти полномочия Π½Π΅ прСдоставлСны.

β–‘ ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ запроса ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ Π² Π½Π°Ρ‡Π°Π»Π΅ выполнСния, Π½ΠΎ Π³ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ бСзопасности Π²Π½ΡƒΡ‚Ρ€ΠΈ прилоТСния.

Если сборка Π±Ρ‹Π»Π° сконфигурирована для использования Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ смоТСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ permview.exe для просмотра ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ, нацСливая Π΅Π΅ Π½Π° Ρ„Π°ΠΉΠ» сборки, содСрТащий манифСст сборки:

permview.exe assembly.dll

Π’Ρ‹Π²ΠΎΠ΄ для прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚Ρ€ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ.

minimal permission set:

<PermissionSet class="System.Security.PermissionSet" version="1">

 <IPermission class="System.Security.Permissions.UIPermission, mscorlib, Version=1 .0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

  version="1" Unrestricted="true" />

</PermissionSet>

optional permission set:

<PermissionSet class="System.Security.Permission.Set" version="1">

 <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=1.0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

  version="1"

  Flags="UnmanegedCode" />

</PermissionSet>

refused permission set:

<PermissionSet class="System.Security.PermissionSet" version="1" >

 <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=1.0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

  version="1"

  Read="C:\" />

</PermissionSet>

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ полномочиям ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ мноТСство ΠΏΡ€Π°Π² сразу. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ мноТСства ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ (Internet, LocalIntranet ΠΈ Everything) ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ бСзопасности ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ сборки, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚. НапримСр, Ссли сборка сообщила, Ρ‡Ρ‚ΠΎ Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ для выполнСния всС полномочия Π² мноТСствС ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ LocalIntranet, Π° администратор Π·Π°Ρ‚Π΅ΠΌ сузил мноТСство ΠΏΡ€Π°Π² LocalIntranet Π²ΠΎ врСмя выполнСния прилоТСния, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСизвСстно, Π² ΠΊΠ°ΠΊΠΎΠΌ мноТСствС ΠΏΡ€Π°Π² происходит Ρ€Π°Π±ΠΎΡ‚Π°.

БущСствуСт Ρ‚Ρ€ΠΈ мноТСства ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²ΠΎ врСмя выполнСния прилоТСния, эти мноТСства ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²:

β–‘ Nothing

β–‘ Execution

β–‘ FullTrust

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ встроСнноС мноТСство ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ:

[assembly:PermissionSetAttribute(SecurityAction.RequestMinimum,

 Name = "FullTrust")]

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ сборка Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, встроСнноС мноТСство ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ FullTrust. Если это мноТСство Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ прСдоставлСно, Ρ‚ΠΎ сборка ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ Π²ΠΎ врСмя выполнСния ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ бСзопасности.

НСявноС ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠ΅

Часто, ΠΊΠΎΠ³Π΄Π° прСдоставлСна Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ полномочия, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ нСявноС ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π½Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ полномочия. НапримСр, Ссли присвоСно ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠ΅ FileIOPermission для C:\, Ρ‚ΠΎ нСявно прСдполагаСтся, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ имССтся доступ ΠΊ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌ (Π΄ΠΎΠΏΡƒΡ‰Π΅Π½ΠΈΠ΅ систСмы бСзопасности ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… записСй Windows).

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠ΅ нСявно вносит Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠ΅ Π² качСствС подмноТСства, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· SecurityApp5

class Class1 {

 static void Main(string[ ] args) {

  CodeAccessPermission permissionA =

   new FileIOPermission(FileIOPermissionAccess.AllAccess, @"C:\");

  CodeAccessPermission permissionB =

   new FileIOPermission(FileIOPermissionAccess.Read, @"C:\temp");

  if (permissions.IsSubsetOf(permissionA) {

   Console.WriteLine("PermissionB is a subset of PermissionA");

  } else {

   Console.WriteLine("PermissionB is NOT a subset of PermissionA");

  }

 }

}

Π’Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

PermissionB is a subset of PermissionA

ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ дСйствуСт Π² Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, Π³Π΄Π΅ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ нСблагоприятного. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² класса нСзависимого поставщика ΠΈ ΠΏΡ€ΠΈ этом Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ доступ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ диску.

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ этого, создаСтся экзСмпляр полномочия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ класса вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Deny():

using System;

using System.IO;

using System.Security;

using System.Security.Permissions;

namespace SecurityApp6 {

 class Class1 {

  static void Main(string[] args) {

CodeAccessPermission permission =

    new FileIOPermission(FileIOPermissionAccess.AllAccess, @"C:\");

   permission.Deny();

   UntruscworthyClass.Method();

   CodeAccessPermission.RevertDeny();

  }

 }

 class UntrustworthyClass {

  public static void Method() {

   try {

    StreamReader din = File.OpenText(@"C:\textfile.txt");

   }

   catch {

    console.WriteLine("Failed to open file");

   }

  }

 }

}

Если Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ сообщСниС Failed to open file, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ класс Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ доступа ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ диску.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² Deny() дСлаСтся Π½Π° экзСмплярС класса полномочия, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ² RevertDeny() выполняСтся статичСски. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этого Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² RevertDeny() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² ΠΏΡ€Π΅ΠΆΠ½Π΅Π΅ состояниС всС запросы Deny() Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ стСка. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π±Ρ‹Π»ΠΎ сдСлано нСсколько Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Deny(), Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ² RevertDeny().

ЗаявляСмыС полномочия

ΠŸΡƒΡΡ‚ΡŒ имССтся сборка, которая Π±Ρ‹Π»Π° установлСна Π² систСмС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с полномочиями Full Trust. Π’ этой сборкС сущСствуСт ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сохраняСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² тСкстовом Ρ„Π°ΠΉΠ»Π΅ Π½Π° локальном дискС. Если ΠΏΠΎΠ·ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ установлСно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ свойством контроля, Ρ‚ΠΎ для прилоТСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ полномочия FileIOPermission для сохранСния Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° дискС.

Π­Ρ‚ΠΎ каТСтся, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ дСйствиС Π½Π° локальном дискС. Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли сборки с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ полномочиями обратятся ΠΊ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ сборкам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ Π½Π° стСк ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ стороны, которая Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π° это ΠΏΡ€Π°Π².

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ сборки с достаточно высоким ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ надСТности ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΡΠ²ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈΠΌΠΈ полномочия. Если сборка ΠΈΠΌΠ΅Π΅Ρ‚ полномочия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹ Π΅ΠΉ для заявки Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€Π°Π², это снимаСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ для Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π² стСкС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ полномочия.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ содСрТит класс AuditClass, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Save(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ строку ΠΈ сохраняСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² C:\audit.txt. ΠœΠ΅Ρ‚ΠΎΠ΄ AuditClass заявляСт полномочия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½Ρ‹ для добавлСния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк Π² Ρ„Π°ΠΉΠ». Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это, ΠΌΠ΅Ρ‚ΠΎΠ΄ прилоТСния Main() явно ΠΎΡ‚Π²Π΅Ρ€Π³Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ трСбуСтся ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Audit:

using System;

using System.IO;

using System.Security;

using System.Security.Permissions;

namespace SecurityApp7 {

 class Class1 {

  static void Main(string[] args) {

   CodeAccessPermission permission =