如何对应用程序保密?

Posted

技术标签:

【中文标题】如何对应用程序保密?【英文标题】:How to keep the app secret a secret? 【发布时间】:2012-01-30 23:10:17 【问题描述】:

每个新的 Play 应用都会在其配置文件中生成一个新的应用机密。

application.secret=asdfadsfdasf

我正在开发一个将部署在 Heroku 上的开源应用程序。如何将应用程序保密(例如,不将其提交到源代码管理)?

应用机密到底用在了哪里?也许出于我有限的目的,我真的不必保守秘密?

【问题讨论】:

【参考方案1】:

您可以将密钥外部化为环境变量。

conf/application.conf 中直接替换

application.secret=abc123...

application.secret=$APP_SECRET

然后在 Heroku 中设置这个配置变量:

$ heroku config:add APP_SECRET=abc123...

现在您可以基于每个应用管理机密,避免将它们检入版本控制。

【讨论】:

如果您不打算使用 heroku 进行部署?有没有使用类似 jasypt 的选项【参考方案2】:

看起来这个秘密很重要,但您可以为生产和开发生成新的秘密。因此,对于开发,您可以将其签入 SVN,然后生成一个不同的用于生产。

http://www.playframework.org/documentation/1.0/production

【讨论】:

但是我在 SVN(好吧,git)中的 application.conf 将被部署到生产环境中。换种说法,我想将我的 application.conf 置于源代码控制之下。我的生产部署将只是一个git push 到 Heroku。那么,我应该运行一个部署后脚本来更改应用程序密钥吗?但是......这个脚本是否存储在源代码管理下?部署到 Heroku 时有哪些实用的解决方案? 我想我不是在提倡简单地使用 git push,而是你需要一个脚本在推送到生产之前生成一个新的密钥,这样就不会被检查到源代码控制中。我不确定的问题是,如果您每次按下时都重新生成该密钥会产生问题吗?如果不是,那么在生产环境中存储秘密可能就不是那么重要了。 我认为更改应用程序密钥不是一个好主意。如果您在某些东西上签名(例如散列用户密码),您需要能够重复这个确切的签名,我相信这确实(应该)使用应用程序密码。

以上是关于如何对应用程序保密?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我必须对注册令牌保密?

如何简单地使其对公众保密?无需为我的脚本更改任何内容

如何在使用 OAuth2 的资源所有者密码凭据授予类型时对客户端凭据保密

大数据时代如何做好保密工作?

如何加强分享文件安全保密性

原神代码疑似遭恶意泄露!对中国游戏企业数据保密都有哪些启发?