繁体   English   中英

安全地存储数据

[英]Securely storing data

我理解大多数情况下安全存储数据的概念,包括将数据存储在一个单独的服务器上,该服务器只允许来自应用程序的连接,加密的密钥对等等。但是,我仍然不明白如何分离服务器它更加安全。

例如,假设我有一个强化且安全的Web服务器,它从用户输入中捕获数据以进行存储。 数据经过加密并通过db查询或Web服务提交给数据库服务器。 数据库服务器仅允许来自Web服务器的连接,并以加密形式存储数据。 因此,如果有人访问数据库,则数据毫无价值。

但是,如果有人访问Web服务器,他们将可以访问数据库以及加密算法和密钥,不是吗? 既然如此,为什么甚至将数据放在不同的服务器上,因为数据传输只是另一个潜在的攻击点?

有没有办法在Web服务器上隐藏连接信息和加密算法,这样如果它被泄露,就无法访​​问数据库服务器? 混淆是不够的,我不会想到。 欢迎任何想法。

谢谢Brian

人们为安全设计的方式有一定的神奇思维和民间传说,你是对的:将数据存储在不同的服务器上并不一定能让事情变得更加安全,除非你做过各种各样的事情。太。

管理密钥是其中很重要的一部分; 在Web应用程序的上下文中这样做是一个独立的主题,我不知道任何强大的PHP解决方案。 你是对的 - 如果你的web应用程序需要能够解密某些东西,它需要访问密钥,如果web应用程序被泄露,攻击者也可以访问密钥。

这就是为什么我倾向于使用公钥加密,并将面向公众的Web服务器视为“只写” - 即Web服务器使用公钥加密,存储在数据库中,并且永远不能解密它; 只有一个单独的进程(在公共互联网上不可用)才能使用私钥对其进行解密。 这样,您可以在您的数据库中存储信用卡详细信息,只有为卡充电的应用程序才有私钥来解密它; 此应用程序在安全的环境中运行,无法从Internet访问。

其次,有多种级别的妥协 - 例如,攻击者可能获得对服务器文件系统的只读访问权限。 如果该文件系统包含数据库,则他们可以获取数据文件,将其还原到他们控制的服务器,并使用解密密钥窃取您的私人数据。 如果数据库在单独的服务器上运行(无法从Internet访问),则此攻击路径将变得不可能。

一条攻击路线让你打开的事实并不意味着你无法抵御其他攻击。

在我的大多数设置中,Web服务器位于防火墙的DMZ中,而DB位于防火墙后面。 我永远不想把数据库服务器放在防火墙之外。 额外的安全级别使得某人在未经授权的情况下更难获取数据。

顺便说一句,网上没有网络服务器应被视为“硬化和安全”。 如果它可供公众使用,则可以被黑客入侵。 这只是他们想要尝试的难度的问题。

你的假设是正确的,如果有人攻击网络服务器,他们可以作为管理员登录,他们可以读写数据库。 但这并不意味着您应该通过将数据库放在Web服务器上来进一步削弱您的设置。 您需要更多安全性,而不是更少。

编辑:

始终考虑安全性中的层次 将关键部件分成单独的层。 这样做有两件事。 它使perp有更多的问题需要解决,它给你更多的时间进行检测和响应。

因此,在您的方案中,访问Web服务器是一层,然后您可以为第二层(防火墙后面,另一层)调用加密服务器,并且加密服务器可能是唯一允许与之交互的机器。数据库服务器,这是另一个层。

图层使其更安全。 但是,它们也增加了负担,减缓了响应时间。 因此,请根据您的实际需求保持平衡。

这里的问题是密钥位于面向公众的服务器上,可能会受到损害 - 即使服务器本身“硬化”,您的应用程序中可能存在漏洞,攻击者可以访问密钥或数据。

为了提高安排的安全性,您可以将处理加密数据的代码(以及密钥)移动到只能由Web服务器访问的安全机器上,并且只能通过非常有限的API(即最低限度的API)需要)。 记录每个操作以发现异常行为,这可能是尝试提取秘密数据的症状。

从安全角度来看,将数据库放入单独的服务器并没有多大帮助。 如果身份验证令牌受到损害,则游戏结束。

但是 ,将数据库数据访问层(DAL)与业务逻辑和表示分开是有意义的。 这样,如果应用程序服务器成为不择手段的牺牲品,则数据库访问仅限于特定的DAL操作,如果正确实施,这可能会使数据摆脱危害。

除此之外,将数据存储隔离到单独的服务器中没有太大的安全益处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM