Какова цель атрибута PermissionSet в примере класса MSS FileSystemWatcher?

На странице класса MSS FileSystemWatcher он включает пример со следующим атрибутом класса:

 [PermissionSet(SecurityAction.Demand, Name="FullTrust")]

Какова цель этого? Когда он должен быть включен или не включен?

Страница справки класса FileSystemWatcher находится здесь: http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

Ответы

Ответ 1

В классе FileSystemWatcher есть ссылка на неограниченные разрешения CAS. Это означает, что он проверит, что его прямой вызывающий абонент (т.е.: ваш код, если вы используете этот класс напрямую) имеет неограниченные разрешения.

К сожалению, использование требований к ссылкам открывает потенциальные дыры в безопасности, поскольку разрешения косвенных вызывающих абонентов (то есть: код, вызывающий ваш код) не проверяются запросом на связь. Это означает, что косвенный вызывающий абонент с ограниченными разрешениями может манипулировать вашим высоконадежным кодом, делая что-то нелепое от его имени, что в противном случае у него не было бы прав доступа.

Один из способов предотвращения атаки такого типа - применить полный спрос на одно и то же разрешение на любой код, который потребляет тип или элемент с запросом на связь. Это гарантирует, что любые косвенные абоненты будут подвергнуты одинаковому требованию на разрешение, тем самым гарантируя, что они не смогут ничего сделать с помощью вашего кода, который они не смогли бы сделать самостоятельно. Применение полной потребности этого типа - это то, что показано в примере кода MSDN для FileSystemWatcher.