Подтверждение
В основе политики безопасности лежат наборы правил, устанавливаемые администраторами. Защита .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 также доверено добавлять подтверждение, ведь, кроме всего прочего, именно она проводит политику безопасности. Подтверждение можно расширять: вы можете определять свои типы подтверждений и использовать их в политике безопасности.
CompEbook.ru Железо, дизайн, обучение и другие