Тестирование кода .NET в средах с частичным доверием - PullRequest
5 голосов
/ 21 августа 2008

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

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

Ответы [ 5 ]

3 голосов
/ 18 февраля 2009

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

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

3 голосов
/ 21 августа 2008

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

Я думаю, что подход к этому был бы чем-то вроде -

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

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

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

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

1 голос
/ 30 августа 2012

Я только что опубликовал статью под названием Частичное доверительное тестирование с 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
    }
}
1 голос
/ 22 августа 2008

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

В разделе Политика безопасности во время выполнения вы найдете 3 уровня политики: Enterprise, Machine и User. Если вы углубитесь в Machine или User, вы найдете определения групп кодов и наборов разрешений . Когда вы говорите, что хотите протестировать некоторый код .NET в средах с частичным доверием, я предполагаю, что вы захотите проверить один из уже определенных стандартных наборов разрешений, таких как Internet . Вам необходимо определить кодовую группу , соответствующую вашему приложению (или определенным сборкам), и назначить выбранный вами набор разрешений для этой кодовой группы .

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

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

Дайте ему имя, скажем PartialTrustGroup , затем нажмите Далее .

Вы должны указать условие членства для этой группы, и существуют различные типы. Мне нравится создавать определенную папку с именем PartialTrust на моем компьютере, а затем создавать соответствующее условие членства в URL. Итак, мой URL выглядит так ... Файл: // C: / Пользователи / мартин / документы / partialtrust / *

* - это подстановочный знак для перехвата любой сборки под этим путем. Нажмите Далее .

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

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

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

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

1 голос
/ 21 августа 2008

Используйте Microsoft Application Verifier .

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

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