Php 安全地存储数据

Php 安全地存储数据,php,mysql,security,data-security,Php,Mysql,Security,Data Security,我在很大程度上理解了安全存储数据的概念,包括将数据存储在单独的服务器上,该服务器只允许来自应用程序的连接、用于加密的密钥对等。但是,我仍然不理解分离服务器如何使其更安全 例如,假设我有一个web服务器,它经过加固且安全,它从用户输入中捕获数据进行存储。数据经过加密,并通过db查询或web服务提交到db服务器。db服务器只允许从web服务器进行连接,并以加密形式存储数据。因此,如果有人访问数据库,数据就毫无价值 但是,如果有人访问web服务器,他们将可以访问数据库以及加密算法和密钥,不是吗?既然如

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

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

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

是否有某种方法可以隐藏web服务器上的连接信息和加密算法,以便在其受到破坏时无法访问db服务器?我认为,混淆是不够的。欢迎提出任何意见

谢谢
Brian

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

顺便说一句,网络上的任何web服务器都不应被视为“加固和安全的”。如果它对公众开放,它可以被黑客入侵。这只是他们想多努力的问题

您的假设是正确的,如果有人入侵Web服务器,使其能够以管理员身份登录,则可以读取和写入数据库。但这并不意味着您应该通过将DB放在web服务器上来进一步削弱您的设置。你想要更多的安全,而不是更少

编辑:

始终从安全性的层次来考虑。将关键部件分为不同的层。这有两个作用。它让罪犯有更多的问题需要解决,也让你有更多的时间去发现和回应

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


分层使其更加安全。不过,它们也增加了负担,减慢了响应时间。因此,请根据您的实际需求平衡您的解决方案。

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


为了提高协议的安全性,您可以只将处理加密数据的代码(以及密钥)移动到仅可由web服务器访问且仅可通过非常受限的API(即所需的最低限度)访问的安全机器上。记录每个操作是为了发现异常行为,这可能是试图提取机密数据的征兆。

人们设计安全的方式中有一定的魔法思维和民间传说,你是对的:将数据单独存储在不同的服务器上并不一定会使事情更加安全,除非你也做过各种其他事情

管理密钥是其中的一个重要部分;在web应用程序的上下文中执行此操作是一个独立的主题,我不知道有任何针对PHP的健壮解决方案。你说得很对-如果你的web应用程序需要能够解密某些东西,它需要访问密钥,如果web应用程序被压缩,攻击者也可以访问密钥

这就是为什么我倾向于使用公钥加密,并将面向公众的web服务器视为“只写”——即web服务器使用公钥加密,存储在数据库中,并且永远无法解密;只有单独的进程(在公共internet上不可用)才能使用私钥对其进行解密。通过这种方式,您可以将信用卡详细信息存储在数据库中,并且只有向信用卡收费的应用程序才具有解密它的私钥;此应用程序在安全环境中运行,无法从internet访问

其次,存在多个级别的危害—例如,攻击者可能以只读方式访问服务器的文件系统。如果该文件系统包含数据库,他们可以获得数据文件,将其恢复到他们控制的服务器,并使用解密密钥窃取您的私人数据。如果数据库运行在单独的服务器上(无法从internet访问),则此攻击路径将变得不可能


事实上,一条攻击路线会让您处于开放状态并不意味着您无法抵御其他攻击

从安全角度来看,将数据库放在单独的服务器中并没有真正的帮助。如果身份验证令牌遭到破坏,游戏就结束了

然而,将数据库和数据访问层(DAL)与业务逻辑和表示分离是有意义的。这样,如果应用程序服务器沦为无良之手的牺牲品,则数据库访问仅限于特定的DAL操作,如果正确实施,这将大大有助于消除数据的危害


除此之外,将数据存储分离到单独的服务器中并没有多少安全好处。

是的。但是,如果他们访问web服务器,他们就不能从那里连接到db吗?顺便说一句,你的评论正是我所关心的。在web服务器上是您与数据库的连接设置,以及任何密钥和加密算法。似乎访问web服务器也会暴露您的db服务器