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

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

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

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ caspol.exe администратором ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π½ΠΎ Ссли Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· систСмы ΠΈ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Administrator, caspol.exe Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, caspol.exe Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ бСзопасности Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ саму ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ caspol.exe нСработоспособной.

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

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° бСзопасности Π² .NET

Π§Ρ‚ΠΎΠ±Ρ‹ систСма бСзопасности .NET Ρ€Π°Π±ΠΎΡ‚Π°Π»Π°, программистам Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ CLR обСспСчСниС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ бСзопасности. Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? Когда вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, доступ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Π½Π° локальном дискС), CLR Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ стСк с Ρ†Π΅Π»ΡŒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ участник Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€Π°Π²Π°.

Π‘Π»ΠΎΠ²ΠΎ 'ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ' ΡƒΠΆΠ΅, вСроятно, обСспокоило вас Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΈ понятно, Ρ‡Ρ‚ΠΎ Π΅Π΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ β€” это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСимущСства управляСмой срСды .NET, приходится ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. Π˜Π½Π°Ρ‡Π΅ сборки, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ Π½ΠΈ, ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ обращСния ΠΊ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ сборкам ΠΈ систСма Π±Ρ‹Π»Π° Π±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° для Π°Ρ‚Π°ΠΊΠΈ.

Для справки, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΌΠΈ Π² этой Π³Π»Π°Π²Π΅ частями Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ .NET Framework ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

β–‘ System.Security.Permissions

β–‘ System.Security.Policy

β–‘ System.Security.Principal

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

Π’Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ полномочия

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Windows Forms с ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ, которая ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ дСйствиС, ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ΡΡ ΠΊ диску. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ подходящСго полномочия для доступа ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ диску (FileIOPermission), ΠΊΠ½ΠΎΠΏΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‡Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ нСдоступная (сСрым Ρ†Π²Π΅Ρ‚ΠΎΠΌ).

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ прСдставлСн конструктор Ρ„ΠΎΡ€ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ FileIOPermission, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Demand() ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.Security;

using System.Security.Permissions;


namespace SecurityApp4 {

 public class Form1 : System.Windows.Forms.Form {

  private System.Windows.Forms.Button button1;

  private System.ComponentModel.Container components;

  public Form1() {

   InitializeComponent();

   try {

    FileIOPermission fileioperm = new

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

    fileioperm.Demand();

   } catch {

    button1.Enabled = false;

   }

  }

  public override void Dispose() {

   base.Dispose();

   if(component != null) components.Dispose();

  }

#region Windows Form Designer generated code

  /// <summary>

  /// Π’Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ конструктора β€” Π½Π΅ измСняйтС

  /// содСрТимоС этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π°.

  /// </summary >

  private void InitializeComponent() {

   this.button1 = new System.Windows.Forms.Button();

   this.SuspendLayout();

   //

   // button1

   //

   this.button1.Location = new System.Drawing.Point(48, 104);

   this.button1.Name = "button1";

   this.button1.Size = new System.Drawing.Size(192, 23);

   this.button1.TabIndex = 0;

   this.button1.Text = "Button Requires FileIOPermission";

//

   // Form1

   //

   this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

   this.ClientSize = new System.Drawing.Size(292, 273);

   this.Controls.AddRange(new System.Windows.Forms.Control[] {this.button1});

   this.Name = "Form1";

   this.Text = "Form1";

   this.ResumeLayout(false);

  }

#endregion

  /// <summary>

  /// Основная Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° для прилоТСния.

  /// </summary >

  [STAThread]

  static void Main() {

   Application.Run(new Form1());

  }

 }

}

МоТно Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ FileIOPermission содСрТится Π² пространствС ΠΈΠΌΠ΅Π½ System.Security.Permissions, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ всС мноТСство ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт классы для Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΈ пСрСчислСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€Π°Π² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ создании FileIOPermission, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ, Π½ΡƒΠΆΠ΅Π½ Π½Π°ΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΉ доступ ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния).

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ прилоТСния с локального диска, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° бСзопасности Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ доступ ΠΊ локальной памяти, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Но Ссли ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» Π½Π° сСтСвой диск ΠΎΠ±Ρ‰Π΅Π³ΠΎ доступа ΠΈ снова Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ мноТСства ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ LocalIntranet, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ доступ ΠΊ локальной памяти, ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ нСработоспособной (сСрой):

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

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅ΠΌΡ‹Π΅ CLR, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ пытаСтся Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠΏΡ€Π΅ΠΊΠΈ прСдоставлСнным Π΅ΠΌΡƒ ΠΏΡ€Π°Π²Π°ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° SecurityException, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдоставляСт доступ ΠΊ ряду ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… элСмСнтов ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡƒΡŽ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ трассировку стСка (SecurityException.StackTrace) ΠΈ ссылку Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (SecurityException.TargetSite). SecurityException прСдоставляСт Ρ‚Π°ΠΊΠΆΠ΅ свойство SecurityException.PermissionType, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Permission, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ бСзопасности.

Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ полномочия

Как ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²Ρ‹ΡˆΠ΅, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ полномочия Π²ΠΏΠΎΠ»Π½Π΅ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎ врСмя выполнСния, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сборку Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π΄Π΅Π»Π°Π»Π° Π±ΠΎΠ»Π΅Π΅ мягкий запрос ΠΏΡ€Π°Π² прямо Π² Π½Π°Ρ‡Π°Π»Π΅ выполнСния, Π³Π΄Π΅ ΠΎΠ½Π° ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΠΉ Π½ΡƒΠΆΠ½ΠΎ: МоТно Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ полномочия трСмя способами:

β–‘ ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ полномочия (Mimimum) β€” полномочия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠ΄Ρƒ для выполнСния.

β–‘ ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ полномочия (Optional) β€” полномочия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ способСн эффСктивно Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΈ Π±Π΅Π· Π½ΠΈΡ….

β–‘ ΠΠ΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹Π΅ полномочия (Refused) β€” полномочия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΊΠΎΠ΄Ρƒ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ полномочия ΠΏΡ€ΠΈ запускС сборки? БущСствуСт нСсколько ΠΏΡ€ΠΈΡ‡ΠΈΠ½:

β–‘ Π•сли сборкС Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ полномочия для выполнСния, Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± этом Π² Π½Π°Ρ‡Π°Π»Π΅, Π° Π½Π΅ Π²ΠΎ врСмя выполнСния.

β–‘ Π‘ΡƒΠ΄ΡƒΡ‚ прСдоставлСны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ полномочия ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Π­Ρ‚ΠΎ сокращаСт риск воздСйствия сборки Π½Π° области, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρƒ Π½Π΅Π΅ Π½Π΅Ρ‚ ΠΏΡ€Π°Π².

β–‘ Π•сли Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ, увСличиваСтся Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ сборка Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°.

Запрос ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ скорСС всСго Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½Π΅Π΅, Ρ‡Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ слоТная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° рСализуСтся, Π½ΠΎ сущСствуСт высокий риск, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ установлСно Π½Π° машинС, которая Π½Π΅ прСдоставляСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΡ€Π°Π². ΠžΠ±Ρ‹Ρ‡Π½ΠΎ для прилоТСния Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π² самом Π½Π°Ρ‡Π°Π»Π΅ выполнСния, Π³Π΄Π΅ Π΅ΠΌΡƒ Π½Π΅ прСдоставлСны полномочия, Π° Π½Π΅ Π² сСрСдинС процСсса выполнСния.

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

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