將 SecureString 密碼轉換為字串然后通過 MembershipProvider 函式進行驗證時,我在安全報告中遇到堆檢查漏洞問題。我知道我應該使用 char[] 來處理密碼而不是字串。但是如何將 char[] 傳遞給內置函式以避免該問題?
public static string SecureStringToString(SecureString ss)
{
return Marshal.PtrToStringUni(Marshal.SecureStringToGlobalAllocUnicode(ss)); //<---Heap Inspection issue
}
...
Membership.ValidateUser(UserName, SecureStringToString(pwd));
uj5u.com熱心網友回復:
但是如何將 [a SecureString] 傳遞給內置 [t] 函式以避免該問題?
你不能。Membership.ValidateUser沒有接受 SecureString 的多載。為什么?我們不知道。也許 ASP.NET Membership 框架不是為高安全性系統設計的,在這些系統中,針對堆檢查強化代碼是一項業務需求。
因此,您只有兩個選擇:
使用不同的(定制的)用戶驗證方法或
接受密碼會在堆上逗留一段時間的事實。
uj5u.com熱心網友回復:
Microsoft 建議您不要將 SecureString 用于任何新開發。請參閱此處的備注:
https://learn.microsoft.com/en-us/dotnet/api/system.security.securestring?view=net-6.0
并在此處鏈接 GitHub 建議:
https://github.com/dotnet/platform-compat/blob/master/docs/DE0001.md
不要將 SecureString 用于新代碼。將代碼移植到 .NET Core 時,請考慮陣列的內容在記憶體中未加密。
回答您的實際問題(上面鏈接中的示例)。在輸入憑據時,您需要逐個字符地構建安全字串。傳遞一個(完整的)char 陣列與傳遞一個字串沒有太大區別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/515532.html
標籤:C#网安全asp.net 身份
上一篇:如何從Wildfly獲取密碼
