I was looking at my SonarQube static code analysis and came across a report that says using a SafeTokenHandle DangerousGetHandle method call.
I start by declaring a SafeTokenHandle:
SafeTokenHandle safeTokenHandle;
var returnValue = Logon(safeTokenHandle);
检查它对我的登录方法的返回值。
if (false == returnValue)
{
//stuff
}
Use a basic "using" which I log the value of the SafeTokenValue:
using (safeTokenHandle)
{
Console.WriteLine("Did LogonUser Succeed? " + "Yes");
Console.WriteLine("Value of Windows NT token: " + safeTokenHandle);
然后我有另一个 using 使用“DangerousGetHandle”方法设置一个新的 WindowsItentity:
using (var newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle()))
有没有办法在不使用“DangerousGetHandle”方法的情况下继续获取该信息,还是我只需要接受这方面的风险?
微软表示:“DangerousGetHandle 方法可能带来安全风险”主要是因为引用变得陈旧,这可能导致它访问敏感信息。
看起来使用DangerousAddRef和DangerousRelease是微软的建议,但这些似乎也有风险。任何方向都会有所帮助。