小编bal*_*ame的帖子

如何在不泄露应用程序的密钥和凭据的情况下打开我的Rails应用程序源代码

我在GitHub上托管了许多Rails应用程序.它们目前都是私有的,我经常会从它们的GitHub存储库中部署它们.我希望能够将它们中的一些开源,就像你可以在http://opensourcerails.com上找到的那样.

我的问题是:如何在不泄露超级秘密凭证的情况下公开这些存储库?

例如,我可以查看/config/initializers/cookie_verification_secret.rb并查看几乎每一个的cookie秘密.我不明白这是怎么接受的.这些用户是否都在某种程度上在部署环境中更改这些值?

有些用户甚至暴露他们的AWS秘密和密钥!其他人会将他们的AWS秘密设置为:

ENV['aws-secret']
Run Code Online (Sandbox Code Playgroud)

虽然我不确定他们在什么时候设定了这个价值.

那么,在不影响应用程序安全性的情况下,开源Rails应用程序的最佳实践是什么?

git open-source ruby-on-rails github gitignore

24
推荐指数
2
解决办法
4233
查看次数

如何在不破坏体验的情况下加密用户数据服务器端?

许多用户 - 包括我自己 - 希望将他们在Web服务上所做的一切加密的安全性.也就是说,他们不会在网络服务中任何人能够查看他们的帖子,信息,任务等......

在讨论其他很酷的服务时,这也是一个主要的抱怨:http://news.ycombinator.com/item?id = 1549115

由于此数据需要可恢复,因此需要某种双向加密.但除非您在每个请求中提示用户输入加密密钥,否则此密钥将需要存储在服务器上,并且加密数据的点基本上会丢失.

什么是在不降低用户体验的情况下安全加密用户数据的方法(在每个请求中要求一些密钥)?

- 更新 -

从@ Borealid的回答中,我专注于两种可能性:挑战 - 响应协议,其中没有数据(包括密码)在"清除"中发送,而非挑战 - 响应协议,其中数据(包括密码)在"清除"(尽管通过HTTPS).

挑战 - 响应协议(特别是SRP:http://srp.stanford.edu/)

它的实现似乎需要依赖于完全AJAX站点或使用Web存储.这样浏览器可以在加密期间保持质询 - 响应数据,并且还可以在不同"页面"之间保持加密密钥.(我假设在完成身份验证后,我会将它们发送回加密的加密密钥,他们会在客户端解密以获取真正的加密密钥.)

问题是我要么:

  • 完全AJAX,我不喜欢,因为我喜欢网址,不会让用户只能在一个网址上独立生活,或者
  • 我必须将数据加密密钥存储在Web存储中,基于http://dev.w3.org/html5/webstorage/即使在浏览器关闭后也会存在,并且可能是一个安全漏洞

此外,由于SRP需要多个请求(http://srp.stanford.edu/design.html),因此需要在服务器端存在一些持久性.这只是另一个难题.

传统

如果我可以清楚地传输密码和数据(虽然通过HTTPS),那么上面的客户端问题就不存在了.

在注册时,我将为用户生成一个随机的唯一加密密钥,并使用他们的密码和随机盐对其进行加密.

在数据库中,我将存储用户的密码哈希和salt(通过bcrypt),加密的加密密钥,加密密钥盐和加密iv.

在身份验证之后,我还需要使用他们的密码来解密加密密钥,以便他们可以查看和输入新数据.我只暂时存储此加密密钥,并在明确"注销"时将其删除.

这种方法存在的问题是(就像@Borealid指出的那样)邪恶的系统管理员在您登录时仍然可以查看您的数据.

用户登录时我也不确定如何存储加密密钥.如果他们在同一个数据存储中,被盗数据库会显示盗窃时登录的所有数据.

是否有更好的内存数据存储来存储这些加密密钥(并在SRP身份验证期间挑战数据)?这是Redis会有用的东西吗?

security encryption cryptography rsa server-side

12
推荐指数
1
解决办法
6694
查看次数