安全存储数据

5
我了解安全存储数据的概念,包括将数据存储在仅允许应用连接的单独服务器上,使用密钥对进行加密等。然而,我仍然不理解将服务器分离如何使其更加安全。
例如,假设我有一个网络服务器,它经过加固和保护,并捕获用户输入的数据以进行存储。数据经过加密并通过数据库查询或Web服务提交到数据库服务器。数据库服务器仅允许来自Web服务器的连接,并以加密形式存储数据。因此,如果有人访问数据库,数据就毫无价值了。
但是,如果有人访问网络服务器,他们将可以访问数据库以及加密算法和密钥,对吗?既然如此,为什么要将数据放在另一台服务器上,因为数据传输只是另一个潜在攻击点?
是否有一种方法可以隐藏网络服务器上的连接信息和加密算法,以便在被攻击时不会获得对数据库服务器的访问权限?模糊处理似乎不够安全。欢迎提出任何想法。
谢谢 Brian
4个回答

5
人们在设计安全性方面存在一定程度的神话思维和民间传说,你是正确的:仅将数据存储在不同的服务器上并不能使事情更加安全,除非您还采取了各种其他措施。
管理密钥是其中的重要部分;在Web应用程序的背景下进行此操作是一个独立的课题,我不知道任何PHP的强大解决方案。你是完全正确的-如果您的Web应用程序需要能够解密某些内容,则需要访问密钥,如果Web应用程序受到攻击,则攻击者也可以访问密钥。
这就是为什么我倾向于使用公钥加密,并将面向公众的Web服务器视为“只写”-即Web服务器使用公钥进行加密,存储到数据库中,而且永远无法解密;只有单独的进程(不可从公共Internet访问)才能使用私钥进行解密。这样,您就可以在数据库中存储信用卡详细信息,只有收费的应用程序具有解密所需的私钥;此应用程序在安全环境中运行,不可从Internet访问。
其次,存在多个级别的妥协-例如,攻击者可能会对您服务器的文件系统进行只读访问。如果该文件系统包括数据库,则他们可以获取数据文件,将其还原到自己控制的服务器上,并使用解密密钥窃取您的私有数据。如果数据库在单独的服务器上运行(无法从Internet访问),则此攻击路径变成不可能。
一个攻击路径存在漏洞并不意味着您不能防御其他攻击。

非常出色的信息,包括其他答案。这让我意识到仅仅分离数据是不够的。加密/解密函数也必须分离,使Web服务器像Neville所提到的那样成为“只写”模式。感谢所有人的洞察力! - Brian H

4
在我的大多数设置中,Web服务器位于防火墙的DMZ中,而数据库则在防火墙后面。我永远不想将数据库服务器放在防火墙外。那种额外的安全层使得未经授权的人更难获取数据。
顺便说一句,在互联网上没有一个Web服务器应该被认为是“强化和安全”的。如果它对公众可用,它就可能被黑客攻击。这只是一个问题,取决于他们想尝试多么努力。
你的假设是正确的,如果有人成功地黑进Web服务器并作为管理员登录,他们就可以读写数据库。但这并不意味着你应该通过将数据库放在Web服务器上进一步削弱你的设置。你需要更多的安全性,而不是更少。
编辑:
总是从安全的角度考虑你的问题。将关键部分分成不同的层。这样做两件事。它使犯罪嫌疑人面临更多的问题,并为检测和响应提供了更多的时间。
因此,在你的场景中,访问Web服务器是一层,你可以调用加密服务器作为第二层(在防火墙后面,这是另一层),加密服务器可以是唯一允许与数据库服务器交互的机器,这是另一层。
分层使其更加安全。但它们也增加了负担,减慢了响应时间。因此,请根据实际需求保持解决方案的平衡。

1
是的。但是,如果他们访问了Web服务器,难道他们不能从那里连接到数据库吗? - Brian H
你的“BTW”评论正是我所关心的。在Web服务器上,连接到数据库的设置以及任何密钥和加密算法都存在。似乎访问Web服务器也会暴露你的数据库服务器。 - Brian H
如果有人黑客入侵到管理员登录访问Web服务器的程度,那么是的。但是为什么要把数据库放在Web服务器上,从而使它更容易呢?通过分离,黑客必须获得比没有分离更大的控制权。 - Jonathan M
3
这就像你在说:“我的前门锁很容易被撬开,一旦进去,他们就可以获取我的银行信息,那我为什么要把钱存在银行?” 安全始终是通过层层加固实现的。 - Jonathan M
1
数据库的访问级别由连接到它的用户定义。您可以从“安全”服务器设置您的数据库访问方式,以使该用户无法删除您的数据。这为您提供了另一层保护,以防万一您的Web服务器受到攻击。此外,将Web服务器与DB服务器分离并不仅仅是关于安全性,还涉及可维护性、可用性和扩展性。 - N.B.
显示剩余2条评论

2
问题在于密钥存储在面向公众的服务器上,即使服务器本身已经“加固”,您的应用程序可能存在漏洞,使攻击者能够访问密钥或数据。
为了提高安全性,您可以将处理加密数据的代码(以及密钥)移动到仅可通过非常受限API(即最低限度所需)由Web服务器访问的安全机器上。 每个操作都被记录下来,以便发现异常行为,这可能是试图提取秘密数据的症状。

1
这里有一个好建议。请记住,最佳实践的架构实际上应该使用三个服务器:一个没有应用逻辑的Web服务器、一个包含所有代码的应用服务器和一个数据库服务器。Web服务器是唯一可以与应用服务器通信的东西,而应用服务器是唯一可以与数据库通信的东西。如果层之间的所有交互都尽可能地减少(如@SimonJ所建议的那样),并且在层之间进行相互认证(2路身份验证SSL),则攻击数据库的难度将大大增加,远比它们共存时要困难得多。 - user121356

2
从安全角度来看,将数据库放入单独的服务器并没有真正帮助。如果认证令牌被攻击者获取,那就game over了。
然而,将数据库和数据访问层(DAL)与业务逻辑和表示分离是有意义的。这样,如果应用程序服务器落入不良之徒手中,数据库访问会受到限制,只能进行特定的DAL操作,如果正确实施,这可以有效地保护数据。
除此之外,将数据存储隔离到单独的服务器中并没有太多的安全好处。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接