当存储一个秘密的字符串(例如密码或密钥)时,使用${__V(Value_${idx})}
是不好的做法,因为字符串是不可变的,你不能安排垃圾收集来从内存中删除它们。 Microsoft建议使用System.String
来避免这种情况,其中内容也会在静态时加密。见MSDN: System.Security.SecureString
我看不到在.NET核心控制器中绑定SecureString
参数的方法,当使用{{1的内部异常消息进行模型映射时,框架会为参数抛出SecureString
因此,JSON解析器已经从中创建了JsonSerializationException
,并且该秘密在内存中未加密。
框架甚至不能绑定Could not cast or convert from System.String to System.Security.SecureString.
,这是处理秘密字符串的常用解决方法(尽管未加密,string
是可变的,因此可以覆盖以从内存中删除它们)。它失败了,也有类似的例外。
答案 0 :(得分:0)
我希望有人会说"是的,这些请求是用本机代码解析的,你可以避免这些值进入托管堆... {某种解决方案,可能涉及SecureString
}&# 34。
从评论中可以看出请求是在托管代码中处理的,因此可以说使用SecureString
或char[]
几乎没有意义,因为值已经在堆中。
静态值可能仍然值得加密,因为垃圾收集会在某个时刻驱逐字符串,而不是以确定的方式。