安全地存储数据

时间:2012-01-03 17:00:27

标签: php mysql security data-security

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

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

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

是否有人在Web服务器上隐藏连接信息和加密算法,以便在受到攻击时,无法访问数据库服务器?混淆是不够的,我不会想到。欢迎任何想法。

由于 布赖恩

4 个答案:

答案 0 :(得分:5)

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

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

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

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

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

答案 1 :(得分:4)

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

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

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

编辑:

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

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

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

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