我理解大多数情况下安全存储数据的概念,包括将数据存储在一个单独的服务器上,该服务器只允许来自应用程序的连接,加密的密钥对等等.但是,我仍然不了解服务器的分离方式它更加安全.
例如,假设我有一个强化且安全的Web服务器,它从用户输入中捕获数据以进行存储.数据经过加密并通过db查询或Web服务提交给数据库服务器.数据库服务器仅允许来自Web服务器的连接,并以加密形式存储数据.因此,如果有人访问数据库,则数据毫无价值.
但是,如果有人访问Web服务器,他们将可以访问数据库以及加密算法和密钥,不是吗?既然如此,为什么甚至将数据放在不同的服务器上,因为数据传输只是另一个潜在的攻击点?
有没有办法在Web服务器上隐藏连接信息和加密算法,这样如果它被泄露,就无法访问数据库服务器?混淆是不够的,我不会想到.欢迎任何想法.
谢谢
布赖恩
管理密钥是其中很重要的一部分;在Web应用程序的上下文中这样做是一个独立的主题,我不知道任何强大的PHP解决方案.你是对的 – 如果你的web应用程序需要能够解密某些东西,它需要访问密钥,如果web应用程序被泄露,攻击者也可以访问密钥.
这就是为什么我倾向于使用公钥加密,并将面向公众的网络服务器视为“只写” – 即网络服务器使用公钥加密,存储在数据库中,并且永远不能解密它;只有一个单独的进程(在公共互联网上不可用)才能使用私钥对其进行解密.这样,您可以在您的数据库中存储信用卡详细信息,只有为卡充电的应用程序才有私钥来解密它;此应用程序在安全的环境中运行,无法从Internet访问.
其次,有多种级别的妥协 – 例如,攻击者可能获得对服务器文件系统的只读访问权限.如果该文件系统包含数据库,则他们可以获取数据文件,将其还原到他们控制的服务器,并使用解密密钥窃取您的私人数据.如果数据库在单独的服务器上运行(无法从Internet访问),则此攻击路径将变得不可能.
一条攻击路线让你打开的事实并不意味着你无法抵御其他攻击.