我需要多次在我的项目(控制台应用程序)中使用API密钥。基本上我想这样做:
这样的缓存,是否安全?在离开申请之前可以完全清除缓存吗? 感谢。
答案 0 :(得分:2)
使用依赖注入来传递这个东西,也许吧。 但是你真的需要它在你的应用程序上吗?这可能是糟糕设计的标志。
答案 1 :(得分:1)
您可能希望将其存储在静态变量中。为了更安全,请使用SecureString class
答案 2 :(得分:1)
安全吗?这取决于。你的过程是坐着吗?
(In)安全性完全取决于是否可以访问您的进程。如果有人可以访问您的进程,他们可以读取密钥,无论您是静态存储它(虽然这会使事情变得更容易),或者您只是获取它并将其保存在内存中(在堆栈中)最短的时间。
总是有可能将您的应用程序分页到磁盘,将其内存内容(包括可能的密钥)写入页面文件(到磁盘上)。即使您的密钥仅保留当前请求(如果在错误的时间分页进程,也会发生这种情况!)
像其他人建议的那样,使用类似SecureString的类是最好的选择;当然,并且在一台没有受到损害和安全的机器上运行您的流程。
如果您需要在用户具有管理访问权限的任意计算机上运行它,则没有什么能够真正阻止用户读取密钥。 在这种情况下,最薄弱的链接可能是本地数据库(用户可以直接从DB读取密钥)。
然而,即使在这种情况下使用SecureString也是一个好主意:它的内容是加密的,并进一步增强了保护(使攻击者更难以从过程中读取其纯文本内容)
然而,您还需要保护您的数据库以及您的数据库凭据(可能是您的应用程序中的硬编码,可以轻松读取,如果用户/攻击者再次访问计算机和您的应用程序)
答案 3 :(得分:0)
Here is关于该主题的完整文档。