我有一个大型 ASP.NET 应用程序在 Windows 2003 Web 服务器上运行。系统的部分内容提供包含敏感数据的静态文件(pdf、csv、excel 等)。这些文件由系统中的某些进程创建,由用户和管理员上传,并通过与其他系统进行一些集成而获得。
哪里是存储这些文件的最佳(最安全、最实用)位置。我一直将它们存储在 IIS 之外,并使用 .NET 代码在需要时提供文件。这种方法效果很好,但用户对这些敏感文件的安全性表示担忧,因为它们存储在 Web 服务器上。
有人建议将它们存储在数据库中,但我不想这样做。
有什么想法吗?谢谢!
答案1
更合适的问题是,“你愿意承担多少管理费用“
通过将文件卸载到同一网络上的单独机器(我假设是 Gbps 网络),您将为每笔交易花费大约 1/2 微秒的成本(再次重申,我在这里对磁盘缓存和文件大小做了假设,但我认为这是一个合理的假设)。这只能提供略微更好的安全性。通过使用 128 位块加密的 AES 进行卸载,您可以预期每笔交易大约需要 2-3 微秒)。通过 ASP 会话使用 AES-128 + 身份验证进行卸载,您可以合理地预期它会达到 20-30 微秒的范围(每个文件)。
答案2
只要存储它们的目录被锁定,以便只有应用程序和有效用户可以访问它,那么它们就应该尽可能安全。你可以将它们移动到 Web 服务器可以看到但本身不面向公众的另一台服务器上。
这些文件最终将通过网络提供,因此必须能够被某人/某物读取。
您是否通过 https 提供这些文件?
答案3
但用户对这些敏感文件的安全性表示担忧,因为它们存储在网络服务器上。
嗯,当然。他们想通过网络上传和检索数据。至少在流程的某个阶段,这些数据将位于网络服务器上。一些问题 - 用户是谁?他们是客户吗?如果是,他们对您的架构有多少了解,他们应该了解多少?您(如果在美国)是否符合 PCI 或 HIPAA 要求,或其他某种法规?如果是,那么您应该进行审核,并与客户分享通过/失败的结果,而不是让他们挑剔您的设计。
答案4
我知道您说过不要将它们放入数据库中,但我主张在适当的情况下这样做,而且我认为现在就这么做。无论您以何种方式存储文件,您都将承担一定的开销,问题只是您愿意承担多少。通过将文件存储在数据库中,您可以通过将它们从文件系统中完全删除来进一步限制谁可以查看它们。在正确的控制和编程下,您可以将文件限制为仅由您的应用程序访问,从而消除对另一台服务器和大量文件系统安全更改的需求,更不用说为该额外“安全”服务器制定额外的备份计划了。
像这样存储它们的另一个好处是您可以加密和存储它们,并拥有一个简化的备份计划。