Почему этот пример Code Access Security не работает? - PullRequest
0 голосов
/ 30 мая 2009

Я знаю, что CAS ограниченного значения , но я все равно хочу узнать об этом.

Я не понимаю, какое поведение я вижу: CAS по умолчанию, кажется, вообще не работает в моей довольно нормальной среде.

Возьмите этот образец класса:

using System;
using System.Security;
using System.Security.Permissions;

namespace CASNotWorkingExample
{
    class Program
    {
        static void Main(string[] args)
        {
            FileIOPermission perm = new FileIOPermission(PermissionState.Unrestricted);

            if (SecurityManager.IsGranted(perm))
                Console.WriteLine("granted");
            else
                Console.WriteLine("denied");

            Console.ReadKey();
        }
    }

}

Я создаю его и помещаю исполняемый файл CASNotWorkingExample.exe на другой компьютер (IP-адрес 192.168.1.101) на общей файловой папке «ненадежный». Затем я запускаю его из командной строки без прав администратора, используя \\192.168.1.101\untrusted\CASNotWorkingExample.exe, ожидая, что он вернет «отказано». Это не; возвращает «предоставлено».

Windows знает, что имеет дело с удаленным EXE сомнительной безопасности. Когда я запускаю ту же команду из диалогового окна «Пуск» меню «Пуск», я получаю обычное предупреждение системы безопасности: «Издатель не может быть проверен. Вы уверены и т. Д. И т. Д.». Так что это не то, чтобы ошибочно думать, что исполняемый файл работает на локальной машине и неправильно назначает зону.

Более того, когда я смотрю на тот же самый exe-файл с помощью инструмента настройки .NET 2.0 (щелкните правой кнопкой мыши «Политика безопасности времени выполнения, выберите« Оценить сборку ... »), я вижу, что .NET только назначает разрешения Internet_Zone на сборку. Эти разрешения НЕ включают FileIOPermission (изолированное хранилище является его собственным разрешением).

альтернативный текст http://img5.imageshack.us/img5/2256/casperms.jpg

Данные, которые могут быть полезны для кого-то другого, но до сих пор не были для меня:

  • Я столкнулся с этим во время работы над книгой MS Press для экзамена MCTS 70-536. Глава 11 посвящена CAS; Урок 1 / Пример 1 терпит неудачу для меня, в значительной степени, как описано выше. То, что вы видите здесь, является урезанным вариантом этого.
  • Я убедился, что такой EXE-файл действительно может записывать на диск, т. Е. Проверка IsGranted, вероятно, правильная.
  • Две машины работают под управлением Vista SP1 и WinXP. Поведение одинаково, независимо от того, какой клиент, а какой файловый сервер, так что это не Vista.
  • Поведение идентично при работе от имени обычного непривилегированного пользователя и от имени администратора.
  • Не работает в домене AD.
  • То же имя пользователя и пароль на клиенте и файловом сервере, поэтому я могу получить доступ к файлу без необходимости использовать net use для предоставления учетных данных.

Я уверен, что это будет один из тех "случайных" моментов ... Чего мне не хватает?

Ответы [ 2 ]

1 голос
/ 30 мая 2009

Я не гуру CAS, но я подозреваю, что это может быть связано с изменением в .NET 3.5 SP1 , которое позволяет коду с общего сетевого ресурса работать как Full Trust.

Редактировать: Брэд Абрамс заявляет , что перекомпиляция / цель не нужна, чтобы воспользоваться этим преимуществом. Я бы предположил, что он работает так же и в обратном направлении - при таргетинге 2.0 вы не получите прежнего поведения, если на вашей машине установлен 3.5 SP1.

Существующее приложение не нужно перекомпилировать или изменять каким-либо образом, чтобы воспользоваться этим. Ваши текущие приложения 2.0 будут просто работать, вам не нужно нацеливать что-то новое в 3.5 ..

Я полагаю, что новая установка (ВМ) только с 2.0 FX может быть способна устранить это как причину.

0 голосов
/ 18 января 2010

Способ изменения заключается в том, что при запуске управляемого exe появляется новое свидетельство. Когда exe-файл запускается из Win32 CreateProcess API, напрямую управляемому exe-файру предоставляется полное доверие.

Конечно, инструмент настройки .net не запускает exe, просто проверяет его. Это означает, что свидетельство отличается и влияет на назначенную ему группу кодов. Это, в свою очередь, влияет на разрешения.

Довольно запутанно.

Более подробную информацию можно найти здесь:

msdn social

Блог Брэда Абрамса

...