如何为Web服务器存储敏感用户数据

时间:2013-06-26 18:54:19

标签: database security encryption

有没有办法将敏感用户数据存储在数据库中,这样即使服务器和数据库受到攻击,攻击者也无法读取原始数据?显然,您可以加密数据,但服务器必须能够访问密钥才能进行解密,并且会随服务器一起受到破坏。

编辑:我将使用vps托管,如linode。假设攻击者可以获得对服务器(也有数据库和源代码)的root访问权限一小时。

2 个答案:

答案 0 :(得分:2)

从管理员用户获取密钥

仅将密钥存储在服务器的内存中。仅存储器副本用于在需要时解密数据。当服务器启动时,它必须从管理员处获取密钥信息。当然,这有不同的变化。管理员可以在那一刻插入USB驱动器。管理员可以提供密码,提供对密钥在数据库或其他任何地方的另一台机器的瞬时访问。管理员可以输入密钥库文件的密码,该密码库文件将在服务器上响应控制台上的提示。在管理员登录并选择“输入密钥”选项之前,该网站将无法运行。

这使得攻击者必须在内存中找到密钥才能解密数据。

第二台计算机上的密钥

使用的第二种方法不如依赖管理员安全,但仍然有点安全。将钥匙放在网络上某处的第二台机器上。确保它没有与服务器相同的用户帐户。当服务器启动时,它必须以某种方式连接到另一台机器并获取密钥,仅将它们存储在内存中。您可以再次依靠管理员为其他计算机上的帐户提供密码,或者在Linux中使用存储密钥的SCP。确保通信安全非常重要,这样攻击者就无法在通过网络时看到密钥。

在这种情况下,攻击者必须妥协两台计算机才能从一台计算机获取数据,而从另一台计算机获取密钥。所以它比在同一台机器上安装钥匙更安全。

其他要点

您可以在网上找到所有这些以及更多内容。谷歌是你的朋友。

但请记住一些明显的安全预防措施,以便让坏人更难:

  1. 以物理方式保护系统。不要让坏人把手放在键盘上。
  2. 使用具有良好安全功能的操作系统并使用这些功能。
  3. 禁用root密码并要求所有用户通过其可识别帐户登录,然后根据需要执行某些操作以获得root权限。 (然后记录所有登录和root访问权限,以便告诉谁做了什么。)
  4. 监控机器上发生的情况。这可能意味着视频监控或只是检查日志。
  5. 保持备份“磁带”安全。它们包含与磁盘驱动器相同的秘密。
  6. 不要让内存堆放在可以放弃秘密的地方。
  7. 考虑有权访问的人。他们可靠吗?他们可以被贿赂吗?你能检查一下他们的行为吗?他们是低薪还是心怀不满?

答案 1 :(得分:1)

您可以尝试使用密钥卡/ USB来保存相关的加密数据,但通常如果物理安全受到威胁,所有投注都将关闭。