Что использовать вместо SafeHandle.DangerousGetHandle?

Я смотрел на мой SonarQube статический анализ кода и наткнулся на отчет, который говорит, что с помощью вызова метода SafeTokenHandle DangerousGetHandle.

Я начинаю с объявления SafeTokenHandle:

SafeTokenHandle safeTokenHandle;
var returnValue = Logon(safeTokenHandle);

Проверьте это возвращаемое значение для моего метода входа.

            if (false == returnValue)
            {
                //stuff
            }

Используйте основной "с помощью", который я вхожу значение SafeTokenValue:

            using (safeTokenHandle)
            {
                Console.WriteLine("Did LogonUser Succeed? " + "Yes");
                Console.WriteLine("Value of Windows NT token: " + safeTokenHandle);

Затем у меня есть другое использование, которое устанавливает новый WindowsItentity с помощью метода "DangerousGetHandle":

                using (var newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle()))

Есть ли способ пойти дальше и получить эту информацию, не используя метод "DangerousGetHandle", или мне просто нужно принять на себя риск по этому поводу?

Microsoft говорит: "Метод DangerousGetHandle может представлять угрозу безопасности", прежде всего из-за того, что ссылка устарела, что может привести к получению доступа к конфиденциальной информации.

Похоже, что использование DangerousAddRef и DangerousRelease - это совет Microsoft, но, похоже, они тоже сопряжены с риском. Любое направление будет полезно.

0 ответов

Другие вопросы по тегам