У меня есть фрагмент кода:
public void MyMethod()
{
DirectoryEntry de;
...
de.AuthenticationType = AuthenticationTypes.Secure;
...
}
, который FxCop задыхается на :
CA2122: не подвергать косвенному представлению методы с требованиями ссылки
Разрешение : MyMethod()
вызывает DirectoryEntry.AuthenticationType.set(AuthenticationTypes)
с LinkDemand.
При выполнении этого вызова DirectoryEntry.AuthenticationType.set(AuthenticationTypes)
косвенно подвергается воздействию кода пользователя.
Информация : Не переносите метод, защищенный LinkDemand, методом, который не выполняет проверку безопасности.LinkDemand проверяет разрешения непосредственного абонента, а не проверяет разрешения всех абонентов в стеке вызовов.В этом случае будут проверены разрешения метода-оболочки.Если метод-обертка сам по себе не проверяет разрешения вызывающих абонентов выше в стеке вызовов, злонамеренный код может выполнить упакованную функцию, даже если у него нет разрешения для этого. "
iЯ все для добавления что-то , где-то , чтобы "исправить" эту проблему. Но он не может добавить ее, если это вызовет самопроизвольный код, который в данный момент работает для клиентов работа для клиентов.
Примечание: я не знаю что добавить, или , где (FxCop не включаетэта информация), и я не хочу слишком углубляться в секретный мир безопасности кода, если это тупик.
Если я добавлю "проверку безопасности * к MyMethod
, есть ли возможностьтот код, который работает в данный момент, перестанет работать?
i предположим , что код, как написано сейчас, будет не работать, если у кого-то нет разрешения,Другими словами:
directoryEntry.AuthenticationType = AuthenticationTypes.Secure
будет уже потерпеть неудачу , если у кого-то нет правильных "разрешений".Добавление «проверки безопасности» выше в стек вызовов не изменит этого факта - только вызовет сбой раньше.В этом случае добавьте проверку безопасности в порядке.
С другой стороны, если:
public void MyMethod() {...}
MyMethod();
в настоящее время работает, но
[SecurityCheck(...)]
public void MyMethod() {...}
AD.MyMethod()
будет begin потерпеть неудачу, тогда я не могу добавить его.
Особенно в коде библиотеки, который все используют.
Причина, по которой я не могу проверить это для себя, состоит в том, что никтознает, как воспроизвести ситуацию, в которой возникла бы проблема.
Это похоже на то, когда большинство людей проверяют учетные данные в активном каталоге, пытаясь подключиться к AD с помощью имени пользователя и пароля и прочитать свойство .Возможно, вам не будет разрешено 1073 * читать свойства, даже если имя пользователя / пароль верны.Держу пари, что никто, кроме меня, не знает, как настроить ActiveDirectory для репликации этого случая сбоя.
В моем случае, я полагаю, никто не знает, как настроить что-то, чтобы обеспечить безопасность кода.