我正在使用 asp.net 4。我想知道缓存敏感数据是否安全?在安全方面或任何其他安全问题上是否危险?
4 回答
嗯,是。天生持有某样东西意味着不应该得到它的人有更多机会得到它。如果它是敏感的,那么它就是一个新引入的危险。
两个相关的问题是:
- 泄露的可能性有多大。
- 这是多么敏感。
缓存在内存中的东西不太可能泄露,但有可能。
缓存在内存中并可通过会话或 cookie 访问的内容更有可能被泄露(分别劫持会话或 cookie)。
缓存在数据库中的东西更容易被泄露(窃取文件比内存转储更容易)。
以现实世界的例子为例,具有“记住我”选项的网站。这个可以,大多数社交网站都可以。这增加了某人获得冒充您所需数据的风险,但更糟糕的是,这可能意味着他们会四处发送垃圾邮件,直到您的帐户被禁止 - 烦人但不是世界末日。
大多数银行网站没有“记住我”选项。泄漏的风险同样低(如果他们在某些操作之前坚持要您确认,确实会降低),但等效数据的价值要高得多,风险已经无法接受。
编辑:在我给出的示例中要注意的一件重要事情。“记住您”的站点通过以某种方式记住您已登录,而不是这样做所需的用户/通行证来做到这一点(使用 OpenID 的网站甚至看不到用户/通行证)。如果您记住了一个用户/通行证,则可能会泄露在许多站点中使用的用户/通行证,而不是冒险让某人仅登录您的站点,因此风险再次高得多。
根据微软的模式和实践,这是他们建议的
如果您的服务方法包含敏感数据,例如密码、信用卡号或帐户状态,则不应对其进行缓存。如果敏感数据缓存在客户端计算机上,则会产生严重的安全隐患,因为它会将有趣的数据留给攻击者。
执行以下步骤以确保不缓存敏感数据:
审查敏感数据的操作。查看所有操作以了解敏感数据的使用情况。这可能包括但不限于: 包含个人身份信息 (PII) 或可用于派生不应与用户共享的 PII 的信息 用户提供但不希望与应用程序的其他用户共享的信息来自并非旨在与用户共享的外部可信来源的信息 查看敏感数据缓存操作。查看每个操作如何管理敏感数据并确保它没有被缓存。您可以查看三种敏感数据缓存模式: 自定义缓存代码,例如使用 Dictionary 或 SortedList 对象通过 System.Web.Caching.Cache 进行 ASP.NET 缓存。使用企业库缓存块
这取决于你用它做什么。数据保存在 Web 服务器的内存中。除非您编写了一种方法来访问这些数据,否则将无法访问这些数据,或者攻击者可以访问您的源代码并拥有对 Web 应用程序的写入权限。
我倾向于缓存加密数据,只在请求点进行解密。最后将内存清零。
猜猜如果它以纯文本形式留在内存中,攻击者从内存转储中解决问题不会太难。