Книга: C# для профессионалов. Том II
Отказ от полномочий
Отказ от полномочий
Существуют ситуации, когда необходимо быть абсолютно уверенным, что вызываемый метод действует в защищенном окружении, где он не может сделать ничего неблагоприятного. Предположим, нужно сделать вызов класса независимого поставщика и при этом точно знать, что он не получит доступ к локальному диску.
Чтобы достичь этого, создается экземпляр полномочия, который не должен получить метод а затем перед вызовом класса вызывается метод 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()
.
- Делегирование полномочий
- Глава 9 Построение отказоустойчивых систем
- 9.3 Обеспечение избыточной отказоустойчивости
- Можно ли отказаться от Проводника? Мне удобнее работать с Total Commander, но Проводник все равно постоянно «висит» в па...
- 23.3.1. Отказы жесткого диска
- 8.4.7. Отказ от обслуживания
- 23.3.3. Отказ видеокарты
- Атаки типа «отказ в обслуживании» (DoS) и «распределенный отказ в обслуживании» (DDoS)
- 14. Что делать, когда клиент отказывается от сделки
- 14.8. Отказ от многозадачности
- 6.2. Временное получение полномочий пользователя root
- З.1.5. Почему у меня компьютер долго пищит, а потом отказывается загружаться?