7

所以我正在加密数据,将其存储在数据库中,并使用 mcrypt 对其进行解密。我想知道将加密密钥存储在 public_html 目录之外的 php 文件中是否安全?

将其存储在文件中的原因是它需要用于多次加密,以便多个用户可以解密某些数据,并且我认为将其存储在文件中比存储在数据库表中更安全,就在加密的旁边数据。

有哪些潜在的安全风险?黑客是否有可能获得对该文件的访问权限,从而获得密钥?

4

2 回答 2

9

将其存储在 public_html 之上是一个好主意。您的文件应配置正确的权限,以便只有 Web 服务器或需要它的用户才能读取它。

一种选择是将密钥拆分并存储在不同的地方,例如,它的一部分在文件系统上的文件中,一部分在数据库中。这样做的好处是攻击者更难获得完整的密钥,因为他们需要访问文件系统和数据库。

还要考虑您的服务器环境对安全性有影响,例如共享主机不如专用服务器安全。

没有人可以说攻击者不可能访问密钥,因为这取决于您的整个服务器设置和配置。服务器最常因网络服务器等软件中的漏洞而受到损害,因此您应该遵循良好的安全实践,例如保持软件最新。

于 2012-12-11T11:23:56.063 回答
8

如果您的服务器(如在其操作系统中)受到威胁,则“游戏结束”,无论您的密钥是存储在文件中还是存储在数据库中。所以,是的,“黑客完全有可能获得对这个文件的访问权,从而获得密钥”——通过闯入你的服务器的操作系统。

如果 apache 或 PHP 受到威胁,但操作系统没有受到威胁,您最终会遇到鸡与蛋的问题:如果您将密钥放在 apache/PHP 可以访问它的地方,那么任何闯入 apache/PHP 的人都可以使用它. 如果没有,你不能在你的 webapp 中使用它。

这只留下了一个场景,你的 webapp 被破坏了,而不是周围的基础设施——在这种情况下,一个文件可能确实是一个好主意:许多入侵(例如大多数 SQL 注入变体)可以访问数据库,但不是文件系统。

对于敏感环境,我们有时会选择一个模型,其中加密/解密通过一对 FIFO 处理,真正的加密由外部进程完成 - 这可以做一些启发式并拒绝对可疑模式进行解密。

于 2012-12-11T11:26:10.707 回答