我在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应用程序的最佳实践是什么?
许多用户 - 包括我自己 - 希望将他们在Web服务上所做的一切加密的安全性.也就是说,他们不会在网络服务中任何人能够查看他们的帖子,信息,任务等......
在讨论其他很酷的服务时,这也是一个主要的抱怨:http://news.ycombinator.com/item?id = 1549115
由于此数据需要可恢复,因此需要某种双向加密.但除非您在每个请求中提示用户输入加密密钥,否则此密钥将需要存储在服务器上,并且加密数据的点基本上会丢失.
什么是在不降低用户体验的情况下安全加密用户数据的方法(在每个请求中要求一些密钥)?
- 更新 -
从@ Borealid的回答中,我专注于两种可能性:挑战 - 响应协议,其中没有数据(包括密码)在"清除"中发送,而非挑战 - 响应协议,其中数据(包括密码)在"清除"(尽管通过HTTPS).
挑战 - 响应协议(特别是SRP:http://srp.stanford.edu/)
它的实现似乎需要依赖于完全AJAX站点或使用Web存储.这样浏览器可以在加密期间保持质询 - 响应数据,并且还可以在不同"页面"之间保持加密密钥.(我假设在完成身份验证后,我会将它们发送回加密的加密密钥,他们会在客户端解密以获取真正的加密密钥.)
问题是我要么:
此外,由于SRP需要多个请求(http://srp.stanford.edu/design.html),因此需要在服务器端存在一些持久性.这只是另一个难题.
传统
如果我可以清楚地传输密码和数据(虽然通过HTTPS),那么上面的客户端问题就不存在了.
在注册时,我将为用户生成一个随机的唯一加密密钥,并使用他们的密码和随机盐对其进行加密.
在数据库中,我将存储用户的密码哈希和salt(通过bcrypt),加密的加密密钥,加密密钥盐和加密iv.
在身份验证之后,我还需要使用他们的密码来解密加密密钥,以便他们可以查看和输入新数据.我只暂时存储此加密密钥,并在明确"注销"时将其删除.
这种方法存在的问题是(就像@Borealid指出的那样)邪恶的系统管理员在您登录时仍然可以查看您的数据.
用户登录时我也不确定如何存储加密密钥.如果他们在同一个数据存储中,被盗数据库会显示盗窃时登录的所有数据.
是否有更好的内存数据存储来存储这些加密密钥(并在SRP身份验证期间挑战数据)?这是Redis会有用的东西吗?
cryptography ×1
encryption ×1
git ×1
github ×1
gitignore ×1
open-source ×1
rsa ×1
security ×1
server-side ×1