[英]C# SecureString Usage From COM DLL
我正在嘗試修復一些Fortify錯誤。 我的代碼()中的類將密碼存儲在字符串中。
public class Foo: IDisposable
{
public string Password
{
get;
set;
}
}
Fortify建議我將字符串更改為SecureString。 這可以解決Fortify問題,但是在此之后,我將無法使用此創建COM對象。
我將定義這樣的類:
[ComVisible(true)]
public class TestSecureString : IUnsecurePassword
{
public SecureString Password
{
get;
set;
}
string IUnsecurePassword.Password
{
get
{
if (Password == null)
return null;
IntPtr ptr = Marshal.SecureStringToBSTR(Password);
string bstr = Marshal.PtrToStringBSTR(ptr);
Marshal.ZeroFreeBSTR(ptr);
return bstr;
}
set
{
if (value == null)
{
Password = null;
return;
}
Password = new SecureString();
foreach (char c in value)
{
Password.AppendChar(c);
}
}
}
}
[ComVisible(true)]
public interface IUnsecurePassword
{
string Password { get; set; }
}
然后在C ++中,將像這樣導出IUnsecurePassword
接口:
virtual HRESULT __stdcall get_Password (/*[out,retval]*/ BSTR * pRetVal ) = 0;
virtual HRESULT __stdcall put_Password (/*[in]*/ BSTR pRetVal ) = 0;
它並不能阻止某人確實願意使用IUnsecurePassword接口,但是會提高標准。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.