Путаница в отношении безопасности доступа к коду с непроверяемым кодом - PullRequest
6 голосов
/ 21 мая 2019

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


Учитывая следующий метод

[MethodImpl(MethodImplOptions.ForwardRef)]
private extern void DoStuffUnverifiable();

, который PEVerify считается непроверяемым, какие атрибуты мне абсолютно необходимо применить к определению метода?

  • [SecurityCritical]?
  • [SecuritySafeCritical]?

Как выбрать между этими двумя?Далее,

  • мне нужно установить [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]?
  • Если да, использовать ли SecurityAction.Demand или что-то еще?

Есть ликакие-либо другие атрибуты, которые мне определенно нужны для применения?Есть ли что-нибудь, что я мог бы применить, хотя не обязательно?

1 Ответ

2 голосов
/ 30 мая 2019

В модели прозрачности критичные для безопасности методы помечаются атрибутом [SecurityCritical]:

[SecurityCritical]
public Key GetTVRoomKey() { ... }

Все «опасные» методы (содержащие код, который, по мнению CLR, могут нарушить безопасность и позволить заключенному escape) должен быть помечен [SecurityCritical] или [SecuritySafeCritical]. Это включает в себя:

  • Не поддающиеся проверке (небезопасные) методы
  • Методы, которые вызывают неуправляемый код через P / Invoke или COM-взаимодействие

  • Методы, которые утверждают разрешения или вызывают требующие ссылки методы

  • Методы, которые вызывают методы [SecurityCritical]

  • Методы, переопределяющие виртуальные методы [SecurityCritical]

[SecurityCritical] означает «этот метод может позволить вызывающему частичному вызову покинуть« песочницу ». [SecuritySafeCritical] означает, что «этот метод делает критические для безопасности вещи, но с соответствующими мерами безопасности и так безопасно для частично доверенных абонентов ».


Так что да, в вашем случае - [SecurityCritical], безусловно, необходим, если вы хотите дополнительной безопасности, используйте [SecuritySafeCritical]

...