Декларация безопасности в режиме отладки - PullRequest
0 голосов
/ 05 сентября 2011

Я хочу использовать декларативную безопасность, чтобы гарантировать, что мое приложение запускается только локальным администратором на машине. Например,

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
    try
    {
        LoadUsers();
    }
    catch (System.Security.SecurityException)
    {
        MessageBox.Show("You must be a local administrator to run this application.");
        System.Environment.Exit(1);
    }
}

// You must be an admin to run this method...
[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]
private void LoadUsers()
{
    // etc.
}

Это все хорошо; однако было бы неплохо, если бы я мог отлаживать без предварительного запуска IDE с помощью «Запуск от имени администратора».

Вопрос : Есть ли способ обойти это в атрибуте объявления безопасности? Или я могу использовать другое требование безопасности? Спасибо!

1 Ответ

0 голосов
/ 05 сентября 2011

Полагаю, в этом случае больше контроля с императивной безопасностью.Можно увидеть, подключен ли отладчик или нет, прежде чем делать требования безопасности.

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
        try
        {
            // USE IMPERATIVE SECURITY TO ALLOW THE APP TO RUN IN THE DEBUGGER
            if (!Debugger.IsAttached)
            {
                string user = string.Format(@"{0}\{1}", Environment.UserDomainName, Environment.UserName);
                PrincipalPermission permission = new PrincipalPermission(user, @"BUILTIN\Administrators");
                permission.Demand();
            }
            LoadUsers();
        }
        catch (System.Security.SecurityException)
        {
            MessageBox.Show("You must be a local administrator to run this application.");
            System.Environment.Exit(1);
        }
    }

    // NO DECLARATIVE SECURITY DEMAND HERE
    private void LoadUsers()
    {
       // etc.
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...