Тестирование минимальных привилегий

Очень часто, при разработке софта мы не задумываемся над тем, насколько точно наше окружения соответвтует окружению заказчика. Точнее, мы знаем что оно отличается, но никогда не анализируем на сколько... Ну ладно, некоторые анализируют...
Есть хорошо известный, уже "бородатый" пример неправильного подхода: разработка софта под локальным администратором системы. Потом почему-то оказывается, что у заказчика серьезный администратор и все пользователи на собственных машинах числятся у него максимум в Power Users! И почему-то не всегда могут писать в реестр или в файловую систему.
Второй пример не так широко известен. Даже когда мы работаем без административных прав, все равно разрабатываемая нами .NET программа выполняется с уровнем Full Trust. А что если кто-то ее запустит в окружении с частичным доверием? Самый простой способ проверить это - запустить самому! Можно воспользоваться CasPol.exe, для управления доверием, но я знаю способ проще:
Допустим мой компьютер называется NOMAD, на диске C: лежит App.exe, который мне надо запустить с частичными привилегиями. Если я его запускаю просто:
     c:\App.exe
то оно запускается с уровнем Full Trust.
Если я его запускаю как:
     \\nomad\c$\App.exe
то оно запускается с уровнем Local Intranet zone, что уже гораздо меньше чем Full Trust.
А если запустить так:
     \\10.10.10.27\c$\App.exe
то уровень уже Internet zone, где привилегий почти нет :)

Например, когда-то я написал программу для отсылки почты из командной строки. Выглядит она примерно так:
 // разбор параметров и формирование переменных from,
// to, subject, body
// ......
SmtpMail.SmtpServer = "smtpserver";
SmtpMail.Send(from, to, subject, body);
Так вот, уже при запуске с уровнем Local Intranet zone, я получаю:
Unhandled Exception: System.Security.SecurityException:
Request for the permission of type
System.Web.AspNetHostingPermission,
System, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089 failed.
at mail.Mail.Main(String[] args)

The state of the failed permission was:
И теперь я точно знаю, что та программа работает только в режиме Full Trust. Дешево и сердито!

Коментарі

Популярні дописи з цього блогу

Посчитать количество вхождений каждого слова в текстовом файле

Українська мова