场景:用PHP编写的Web应用程序使用Amazon Web Service,并且必须保留访问密钥ID和秘密访问密钥才能运行。是否有安全存储此数据的当前建议和/或API?
我的想法是根据从本地服务器变量创建的密钥对称地将其加密到文件中。这样,如果有人通过FTP获取文件的副本,丢失了复制文件的笔记本电脑等,那么[希望]是胡言乱语。我担心的是,熟练的攻击者可以上传自己的脚本来解密它。
这似乎是一个common situation而且我从未实现过一个舒适的解决方案。显然我不能使用单向哈希,因为我需要原始数据来创建HMAC才能发送给AWS。相关S.O.的链接问题非常受欢迎。
答案 0 :(得分:1)
阿。安全问题。
我认为你在这里要问的问题是你怎么做的,例如php配置文件中的mySQL密码?
坦率地说,如果有人设法获得您的文件副本,那么无论如何您的安全需要重新思考。对于我自己的用途,我通常只将密码保存在一个地方(在应该使用它们的服务器上)并确保我每次都使用随机生成的密码(将其粘贴到配置文件中,瞧!)< / p>
说实话,如果它不是您自己的主机,任何敏感数据都可能受到损害。
如果它是您自己的主机,我建议在Linux中使用适当的权限,PHPSuExec以确保只有您编写的脚本才能访问这些文件。
无论如何,要回答您的原始问题,您的AWS访问/密钥与MySQL密码相同,好吧,它有可能让某人访问您的服务,但它不会让他们访问您的个人细节。即使使用symetric加密,如果您的脚本有安全漏洞,也可以访问该信息。
简单地说,当你把这些钥匙放在除了你之外的任何人都可以访问的任何地方时,你会冒险。您认为亚马逊的服务器不会受到多大损害?
我的建议是尝试添加尽可能多的安全性,但要密切关注您的帐户,我通常会运行一个cron作业向我发送一封电子邮件,其中包含对我的S3帐户的更改(上传的新文件) ,新的桶等等)从中我可以知道发生了什么。
没有简单的解决方案,它是保护系统的每个单独层的组合。我的意思是,如果你使用symetric加密,那么密码必须存储在某个地方,对吧?或者你打算每次输入它?
希望这有帮助
答案 1 :(得分:0)
我的想法是根据从本地服务器变量创建的密钥将其对称加密为文件。这样,如果有人通过FTP获取文件的副本,丢失了复制文件的笔记本电脑等,那么[希望]是胡言乱语。我担心的是,熟练的攻击者可以上传自己的脚本来解密它。 / p>
这不会有什么坏处,但最终只是通过默默无闻的安全性,因为可以读取文件的人可能也可以读取和反向设计代码。如果没有在每次服务器启动时输入密码或以其他方式提供密码,加密就无济于事。它只是将问题转移到如何保护加密密钥(服务器也需要访问)?
您必须强化和设计您的应用程序和服务器(不要忘记操作系统和远程访问操作系统),以便任何未经授权的人都可以首先读取系统上的文件。
如果您担心某人可以通过物理方式访问该盒子,请专注于物理安全以阻止这种情况发生。
答案 2 :(得分:0)
我使用你建议的对称加密。当我启动服务器时,我需要给它一个密钥来解密包含认证数据的文件。
当然,黑客可以进行内存转储并以这种方式读取密码,但这比阅读明文文件要困难得多。没有完美的解决方案,安全性始终是风险和易用性之间的妥协。
所以服务器安全性仍然是关键问题,它只是一个安全性足够多的问题。我建议查看Bastille Linux或类似的东西来强化你的服务器但这完全是另一个话题。