在PHP文件中存储加密密钥的安全性

时间:2012-12-11 11:12:51

标签: php security codeigniter encryption

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

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

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

2 个答案:

答案 0 :(得分:7)

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

一个选项是将密钥拆分并存储在不同的位置,例如文件系统中的文件的一部分,以及数据库中的一部分。这样做的好处是获取攻击者的完整密钥更加困难,因为他们需要访问文件系统和数据库。

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

没有人可以说攻击者无法访问密钥,因为这取决于整个服务器的设置和配置。服务器通常通过Web服务器等软件中的漏洞进行攻击,因此您应遵循良好的安全措施,例如使软件保持最新状态。

答案 1 :(得分:7)

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

如果apache或PHP被破坏,而不是操作系统,你最终会遇到鸡蛋和鸡蛋问题:如果你把密钥放在哪里,apache / PHP可以访问它,那么任何人都可以使用它阿帕奇/ PHP。如果没有,则无法在您的webapp中使用它。

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

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