Тестирование кода .NET в средах с частичным доверием

StackOverflow https://stackoverflow.com/questions/20718

  •  09-06-2019
  •  | 
  •  

Вопрос

Я хочу протестировать поведение определенного фрагмента кода .NET в средах с частичным доверием.Какой самый быстрый способ это настроить?Не стесняйтесь предположить, что я (и другие читатели) полные новички в CAS.

@Ник:Спасибо за ответ.Увы, рассматриваемый инструмент предназначен явно для неуправляемого кода.Я не сказал «управляемый» в своем вопросе и не должен был предполагать, что люди сделают это по тегу «.NET».

Это было полезно?

Решение

Это отличный вопрос, особенно с точки зрения TDD и проверки кода в различных сценариях доверия.

Я думаю, что я бы подошел к этому примерно так:

  • Создайте AppDomain в моем коде TDD, используя перегрузку AppDomain.CreateDomain(), которая позволяет вам передавать PermissionSet.PermissionSet будет создан для соответствия различным сценариям доверия, которые вы хотите протестировать.

  • Загрузите сборку, содержащую тестируемую логику, в домен приложения.

  • Создавайте экземпляры типов/методов вызова и т. д. в домене приложения, перехватывайте исключения безопасности.

Что-то вроде этого.У меня еще не было времени придумать доказательство концепции.

Другие советы

Функциональность, которую вы ищете, встроена в Visual Studio:

На вкладке безопасности вашего проекта есть кнопка «Дополнительно...», которая позволяет вам настроить, хотите ли вы выполнять отладку с полным доверием или с указанным уровнем доверия.

Использовать Средство проверки приложений Microsoft.

AppVerifier помогает определить:

  • Когда приложение правильно использует API:(Небезопасные API-интерфейсы TerminateThread. Правильное использование API-интерфейсов локального хранилища потоков (TLS). o Правильное использование манипуляций с виртуальным пространством (например, VirtualAlloc, MapViewOfFile).
  • Скрывает ли приложение нарушения прав доступа, используя структурированную обработку исключений.
  • Пытается ли приложение использовать недопустимые дескрипторы.
  • Есть ли повреждения памяти или проблемы в куче.
  • Недостаточно ли приложению памяти из-за нехватки ресурсов.
  • Происходит ли правильное использование критических секций.
  • Будет ли приложение, работающее в административной среде, хорошо работать в среде с меньшими привилегиями.
  • Существуют ли потенциальные проблемы при запуске приложения от имени пользователя с ограниченными правами.
  • Будут ли неинициализированные переменные в будущих вызовах функций в контексте потока.

Вам следует взглянуть на инструмент настройки .NET Framework.Он находится в .NET SDK, и инструкции по его запуску можно найти здесь...http://msdn.microsoft.com/en-us/library/2bc0cxhc.aspx

в Политика безопасности во время выполнения разделе вы найдете 3 уровня политики:Предприятие, машина и пользователь.Если вы углубитесь в «Машину» или «Пользователя», вы найдете определения Кодовые группы и Наборы разрешений .Когда вы говорите, что хотите протестировать некоторый код .NET в средах с частичным доверием, я предполагаю, что вы захотите протестировать его с помощью одного из уже определенных стандартных наборов разрешений, например Интернет .Вам необходимо определить Кодовая группа который соответствует вашему приложению (или конкретным сборкам), и назначьте ему выбранный вами набор разрешений. Кодовая группа .

Вы можете определить свой собственный Наборы разрешений тоже, но давайте пока упростим.

Выберите, хотите ли вы, чтобы ваша новая группа кода существовала на уровне всего компьютера или только для вашей учетной записи пользователя, и соответственно детализируйте уровень политики компьютера или пользователя.Вы увидите группу кодов под названием _All _ Code_.Создайте внутри нее дочернюю группу кодов, щелкнув правой кнопкой мыши и выбрав Новый...

Дай ему имя, скажи Частичная группа доверия , затем нажмите Следующий .

Вам необходимо указать условие членства в этой группе, и существуют различные типы.Мне нравится создавать определенную папку под названием Частичное доверие на моем компьютере, а затем создайте соответствующее условие членства URL-адреса.Итак, мой URL-адрес выглядит так...файл://c:/users/martin/documents/partialtrust/*

* — это подстановочный знак, позволяющий обнаружить любую сборку, расположенную ниже этого пути.Нажмите Следующий .

Теперь вы можете выбрать набор разрешений для вашей новой группы кода.На данный момент, выберите Интернет .Это довольно ограниченный набор, похожий на песочницу Java-апплетов.Нажмите Следующий и Заканчивать .

Теперь щелкните правой кнопкой мыши новую группу кодов и выберите «Свойства».На вкладке «Общие» убедитесь, что установлен самый верхний флажок, затем нажмите «ОК».

Теперь любые сборки .NET, загружаемые из расположения под указанным вами URL-адресом, будут иметь Интернет к ним применен набор разрешений.Ожидайте получения некоторых исключений SecurityException, если вы не написали свой код для тщательного соблюдения сокращенного набора разрешений.

Извините, это длинное описание.На самом деле это намного проще, чем кажется.

Я только что опубликовал статью под названием Частичное доверительное тестирование с помощью xUnit.net в моем блоге.В нем подробно описана платформа на основе xUnit.net, которую мы используем в команде Entity Framework для проверки кода со средним уровнем доверия.

Вот пример его использования.

public class SomeTests : MarshalByRefObject
{
    [PartialTrustFact]
    public void Partial_trust_test1()
    {
        // Runs in medium trust
    }
}

// Or...

[PartialTrustFixture]
public class MoreTests : MarshalByRefObject
{
    [Fact]
    public void Another_partial_trust_test()
    {
        // Runs in medium trust
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top