各种API(如Facebook或Amazon )需要一个秘密密钥来验证对该服务的访问。显然,如果源代码是公开的,关键不应该在源代码中!对于一个封闭的源网站来说呢?
发布于 2011-09-30 11:47:36
我推荐的做法是不要将键放入源代码中。对于你的特殊情况,最好的选择取决于一些细节。
通常,首选项是将密钥保存在没有存储在源代码存储库中的单独文件中。如果您愿意,甚至可以有一个secrets目录,并将密钥存储在那里。通常,您向适当的用户发出密钥--那些需要进行最终构建的用户或可以测试需要密钥的功能的构建者。
如果您有使用源代码的人员不完全信任密钥(例如,如果外包的程序员添加到您的代码中),则如果代码没有秘密,您可以将代码配置为以后备模式操作。这可能适合你的情况,也可能不适合你。
我应该指出,如果分发对象代码,就没有什么好的方法来保守密钥秘密。这种方法只适用于不仅是封闭源,而且是封闭分布的程序。如果您需要做一些混淆处理,那么不仅键,而且混淆器应该在secrets目录中,并且它的分布受到限制。
发布于 2011-10-03 11:41:00
源代码生命周期和密钥管理可能发生冲突。例如,您可以(应该)使用版本控制工具 (如Subversion )来存储对源代码执行的连续修改;如果将密钥放在其中,则密钥也将被存储。基本上,如果您将密钥存储在Web站点源代码中,则需要使源代码与密钥完全相同;密钥很小,因此被认为更容易保密(例如,在纸上写下密钥并将纸张保存在保险箱中是可以想象的,因为输入回来可以在几秒钟内完成),而整个站点的源代码则要麻烦得多。如果您将密钥存储在源代码中,那么,突然之间,获取网站源代码的副本成为攻击者非常有价值的目标。
发布于 2011-09-30 12:21:47
如果使用“在源代码中”,您的意思是作为文件中逻辑代码的一部分,我会同意其他人的意见:不要这样做。就PHP而言,您的代码片段可能会在调试报告中显示出来,甚至可能在网站上(至少在dev视图中)。
另外两个选项是--一个专用的配置文件,使用的是用于项目的编程语言。然后,您可以将它包括在需要它的地方,或者更好地使用类似Registry模式的东西。优点是,文件在直接调用时会被解释,不会输出机密信息。-专用纯文本圆锥形文件。必须保护它不受直接调用的影响,例如,将其置于DocumentRoot之外。
我主要使用后者,通常只在DocRoot中放置一个前端控制器,并将所有库、信任项、大部分数据等与此并行。
https://security.stackexchange.com/questions/7747
复制相似问题