Подтверждение
В основе политики безопасности
лежат наборы правил, устанавливаемые
администраторами. Защита .NET может
использовать эти правила для проведения
той или иной политики. С помощью
подтверждения, представленного
разрешениями для личности, определяется
проводимая политика.
В классе AppDomain имеется функция
ExecuteAssembly, которая заставляет сборку
выполняться. Ее единственным аргументом
является экземпляр класса Evidence (Подтверждение).
Этот класс является коллекцией объектов,
которая представляет личность сборки, и в
то же время является коллекцией объектов,
которые представляют подтверждение.
Сказанное иллюстрируется
примером Evidence (Подтверждение). При его
выполнении получится коллекция
подтверждений, ассоциированная со строгим
именем сборки, а также распечатаются
соответствующие значения.
Evidence *ev = AppDomain::CurrentDomain->Evidence;
lEnumerator *iEnum = ev->GetEnumerator();
bool bNext; // логическая (булева)
переменная bNext
Console::WriteLine(
"Evidence Enumerator has {0} members",
// "Перечисление Evidence имеет {0}
членов "
_box(ev->Count)}; bNext = iEnum->MoveNext(); while (bNext
== true) // пока (bNext == истина) {
Object *x = iEnum->Current;
Type *t = x->GetType();
Console::WriteLine(t->ToString());
if (t == _typeof(Zone)) // если Зона
{
Zone *zone = dynamic_cast<Zone *>(x); // Зона
Console::WriteLine(
" {0}", _box(zone->SecurityZone)); // зона
}
else if (t == _typeof(Url)) // если Url
{
Url *url = dynamic_cast<Url *>(x); Console::WriteLine(
" {0}", url->Value); // Значение }
else if (t == _typeof(Hash)) {
Hash *hash = dynamic_cast<Hash *>(x); unsigned char
mdSHash _gc [] = hash->MD5; unsigned char shalHash _gc [] = hash->SHAl;
Console::WriteLine(
MD5 Hash of Assembly:"); Console::Write(" "); for(int
i = 0; i < md5Hash->Length; i++)
Console::Write(mdSHash[i]); // Запись Console::WriteLine();
Console::WriteLine(
SHA1 Hash of Assembly:"); Console::Write(" "); //
Запись forfint i = 0; i < shalHash->Length; i++)
Console::Write(shalHash[i]); // Запись Console::WriteLine
(); }
else if (t == _typeof(StrongName)) {
StrongName *sn = dynamic_cast<StrongName *>(x);
Console::WriteLine(
" StrongName of Assembly is: {0} version: {!}", //
версия sn->Name, // Имя sn->Version); // Версия
Console::WriteLine(
" Assembly public key:"); Console::Write( //
Запись ");
Console::WriteLine( sn->PublicKey); }
bNext = iEnum->MoveNext(); }
При выполнении этого примера
должна получиться примерно следующая
выдача:
Evidence Enumerator has 4 members System. Security.Policy.Zone
MyComputer System.Security.Policy.Url
file:///C:/01/NetCpp/Chapl3/Evidence/Debug/Evidence.exe
System.Security.Policy.StrongName
StrongName of Assembly is: Evidence version: 1.0.685.28667
Assembly public key: 0024000004800...
...EA897BA System.Security.Policy.Hash
MD5 Hash of Assembly:
41601023422625513614244127248522225222668
SHA1 Hash of Assembly:
216132245725424821. . .
Пере вод такой:
Перечисление Evidence имеет 4 члена
Система. Защита. Политика. Зона
MyComputer Система. Защита. Политика. Url
file:///С:/OI/NetCpp/Chapl3/Evidence/Debug/Evidence.exe
Система. Защита. Политика.
StrongName
StrongName сборки:
версия Evidence: 1.0.685.28667
Открытый ключ сборки: 0024000004800...
... ЕА897ВА Система.
Защита.
Политика.
Хэш-код
MD5 Хэш-код сборки:
41601023422625513614244127248522225222668
SHA1 Хэш-код сборки:
216132245725424821...
Для этой сборки подтверждением,
относящимся к Zone (Зона), является MyComputer.
Подтверждение Url — это местоположение
сборки на диске. Что касается подтверждения
Hash, то оно может дать нам хэш-коды сборки, а
именно MD5 и SHA1. Подтверждение StrongName дает нам
информацию об уникальном имени сборки,
полученном из атрибута AssemblyKeyFileAttribute("KeyPair.snk")
в исходном файле Assemblylnfo.cpp.
Кое-что из этого подтверждения
можно преобразовать в соответствующие
разрешения для личности. Например, у класса
Zone (Зона) имеется метод Createldenti-tyPermission. Он
возвращает интерфейс iPermission, который
представляет, в свою очередь, экземпляр
ZoneldentityPermission, связанный с этой частью
подтверждения. Похожие методы имеются у
классов Url (унифицированный указатель
информационного ресурса) и StrongName.
Другой способ просмотра
разрешений для личности — это получить
ответы на рад вопросов.
- Кто опубликовал (подписал) этот код?
- Какое имя сборки?
- Из какого Web-узла или унифицированного
указателя информационного ресурса (URL)
она была загружена?
- Из какой зоны получен код?
Создатель прикладной области (хоста)
может также предоставить подтверждение,
передавая его коллекции Evidence (Подтверждение)
при вызове метода ExecuteAssembly. Конечно, у
такого кода должно быть разрешение ControlEvidence.
Общеязыковой среде выполнения CLR также
доверено добавлять подтверждение, ведь,
кроме всего прочего, именно она проводит
политику безопасности. Подтверждение можно
расширять: вы можете определять свои типы
подтверждений и использовать их в политике
безопасности.
|