我有需求的应用程序能够访问某些敏感数据(在这种情况下,加密密钥)。 在这一点上,我将它们存储在文件中,以便他们可以在脚本处理连线读取。
然而,它足以根据安全标准,我也要跟着是不安全的,因为如果服务器根帐户被盗有人可以轻松地阅读和复制它们。
典型的解决方案是安装外部存储器方含键,启动应用程序,卸载存储器,让与在RAM中缓存的数据运行。 当然,因为它是PHP这是不可能的。
是否有任何其他的解决办法? 在这一点上我唯一的想法是将担任钥匙,但是我不知道它应该如何工作是安全的小端应用程序。
我有需求的应用程序能够访问某些敏感数据(在这种情况下,加密密钥)。 在这一点上,我将它们存储在文件中,以便他们可以在脚本处理连线读取。
然而,它足以根据安全标准,我也要跟着是不安全的,因为如果服务器根帐户被盗有人可以轻松地阅读和复制它们。
典型的解决方案是安装外部存储器方含键,启动应用程序,卸载存储器,让与在RAM中缓存的数据运行。 当然,因为它是PHP这是不可能的。
是否有任何其他的解决办法? 在这一点上我唯一的想法是将担任钥匙,但是我不知道它应该如何工作是安全的小端应用程序。
正如你已经知道,你无论做什么,如果关键是提供给应用程序,它肯定会提供给已获得了服务器上的root访问权的恶意代码,并极有可能代码已经下获得了进入的UID该应用程序运行得。 这只是一个是多么简单的问题。
因为购买你的应用程序没有长时间运行,这听起来像你将不得不接受超出危险水平。
你的想法是使用某种这使钥匙放在RAM,并且可以通过该应用查询的守护进程。 这样的作品,但你可能已经意识到,如果您的应用程序可以查询它,然后恶意代码可以查询它。 如果您选择该选项,无论如何,考虑使用memcached的 (为什么重新发明轮子?)。
我能想到的唯一的其他选择是写一个Apache模块(C)加载在系统启动时(后秘密的持久副本被卸载)和PHP扩展(C语言)的秘密,以获得从住在同一过程中的Apache模块的秘密。 这假设你使用PHP作为Apache模块,而不是作为一个外部进程。 但对我来说,这听起来有点小题大做,因为它是相当复杂的,它并没有真正消除风险。
你有没有考虑如何处理交换空间? 您可以使用mlock
或类似的(C语言)保守秘密被写入交换,如果是在一个封闭的位置,但它是很难去保护它以这种方式一旦它被移交给PHP解释器。 所以,你最好不交换运行系统。
考虑改变设计,这将限制秘密到一个位置在长时间运行的守护程序(可能不是用PHP编写的),并有PHP应用程序委托需要访问秘密此守护程序的加密功能。