Тестирование минимальных привилегий
Очень часто, при разработке софта мы не задумываемся над тем, насколько точно наше окружения соответвтует окружению заказчика. Точнее, мы знаем что оно отличается, но никогда не анализируем на сколько... Ну ладно, некоторые анализируют...
Есть хорошо известный, уже "бородатый" пример неправильного подхода: разработка софта под локальным администратором системы. Потом почему-то оказывается, что у заказчика серьезный администратор и все пользователи на собственных машинах числятся у него максимум в Power Users! И почему-то не всегда могут писать в реестр или в файловую систему.
Второй пример не так широко известен. Даже когда мы работаем без административных прав, все равно разрабатываемая нами .NET программа выполняется с уровнем Full Trust. А что если кто-то ее запустит в окружении с частичным доверием? Самый простой способ проверить это - запустить самому! Можно воспользоваться CasPol.exe, для управления доверием, но я знаю способ проще:
Допустим мой компьютер называется NOMAD, на диске C: лежит App.exe, который мне надо запустить с частичными привилегиями. Если я его запускаю просто:
Если я его запускаю как:
А если запустить так:
Например, когда-то я написал программу для отсылки почты из командной строки. Выглядит она примерно так:
Есть хорошо известный, уже "бородатый" пример неправильного подхода: разработка софта под локальным администратором системы. Потом почему-то оказывается, что у заказчика серьезный администратор и все пользователи на собственных машинах числятся у него максимум в 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,Так вот, уже при запуске с уровнем Local Intranet zone, я получаю:
// to, subject, body
// ......
SmtpMail.SmtpServer = "smtpserver";
SmtpMail.Send(from, to, subject, body);
Unhandled Exception: System.Security.SecurityException:И теперь я точно знаю, что та программа работает только в режиме Full Trust. Дешево и сердито!
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:
Коментарі
И еще хорошая статья: Developing Software in Visual Studio .NET with Non-Administrative Privileges.