Code access security basics

Кожна програма, орієнтоване на середу CLR (тобто кожне кероване додаток), має взаємодіяти з її системою безпеки. Коли кероване додаток завантажується, його вузол автоматично надає йому набір дозволів. Ці дозволи визначаються параметрами локальної безпеки вузла або ізоляцією додатки. Залежно від цих дозволів додаток або запускається, або викликає виняток безпеки.

Вузол за замовчуванням для класичних додатків дозволяє коду виконуватися в режимі повної довіри. З цієї причини, якщо додаток призначений для настільних комп'ютерів, воно має необмежений набір дозволів. Інші вузли або "пісочниці" надають обмежений набір дозволів для додатків. Набір дозволів може змінюватися від вузла до вузла, тому програма повинна бути розроблена для використання тільки тих дозволів, які допускаються цільовим вузлом.

Щоб писати ефективні програми, націлені на середу CLR, потрібно бути знайомим з наведеними нижче принципами управління доступом для коду.

Тіпобезопасний код. Тіпобезопасний код - це код, який здійснює доступ до типам тільки строго визначеними, допустимими способами. Наприклад, маючи дійсну посилання на об'єкт, тіпобезопасний код може здійснювати доступ до пам'яті за фіксованими зсувів, відповідним реальним членам-полів. Якщо код виробляє доступ до пам'яті за довільним зсувів за межами діапазону пам'яті, що належить відкритим полях цього об'єкта, він не є тіпобезопасним. Щоб мати можливість користуватися перевагами управління доступом для коду, необхідно використовувати компілятор, який створює перевіряється тіпобезопасний код. Детальніше див. У розділі Написання перевіряється тіпобезопасного коду.

Примусовий і декларативний синтаксис. Код, націлений на середу CLR, може взаємодіяти з системою безпеки шляхом запиту дозволів, вимоги певних дозволів від викликають об'єктів, а також шляхом перевизначення деяких параметрів безпеки (при наявності достатніх повноважень). Можна використовувати дві різні форми синтаксису для програмного взаємодії з системою безпеки .NET Framework: декларативний синтаксис і примусовий синтаксис. Декларативні виклики виконуються з використанням атрибутів; примусові виклики виконуються з використанням нових екземплярів класів в вашому коді. Деякі виклики можуть виконуватися тільки примусово, інші - тільки декларативно, а деякі - будь-яким способом.

Безпечні бібліотеки класів. Безпечна бібліотека класів використовує вимоги безпеки для забезпечення наявності у викликають об'єктів дозволів на доступ до ресурсів, що надаються бібліотекою. Наприклад, безпечна бібліотека класів може містити метод для створення файлів, який буде вимагати, щоб викликають його об'єкти володіли дозволами на створення файлів. Платформа .NET Framework включає в себе безпечні бібліотеки класів. Вам необхідно враховувати дозволу, необхідні для доступу до будь-якій бібліотеці, використовуваної кодом. Детальніше див. У підрозділі Використання безпечних бібліотек класів далі в цьому розділі.

Прозорий код. В .NET Framework 4 або пізнішої версії на додаток до визначення відповідних дозволів потрібно визначити, чи повинен код виконуватися як прозорий з точки зору безпеки. Прозорий з точки зору безпеки код не може викликати типи або члени, які визначені як критичні з точки зору безпеки. Це правило відноситься до додатків як з повним, так і з частковим довірою. Для отримання додаткової інформації див. Security-Transparent Code.

Управління доступом для коду і частково довірений код

Ця політика діє щодо всіх версій платформи .NET Framework, крім платформи .NET Framework в складі Silverlight.