存储Rails应用程序的共享密钥

时间:2009-05-31 16:44:11

标签: ruby-on-rails ruby security

我的一个Rails应用程序将依赖于内存中的密钥,因此只有管理员访问某个页面并上传有效密钥后,其所有功能才可用。

问题是这个密钥需要安全存储,因此同一台机器上的其他进程都不能访问它(因此memcached和文件系统不适合)。一个好主意只是将它存储在应用程序中的某个配置变量中,但新生成的实例将无法访问该变量。有没有想过如何在RubyEE / Apache / mod_passenger上实现它?

4 个答案:

答案 0 :(得分:3)

实际上没有办法实现这个目标。 (这是所有DRM系统都存在的问题)

您无法对操作系统保密。您的应用程序必须将密钥放在内存中的某个位置,操作系统内核可以读取它想要的任何内存位置。

您需要能够信任操作系统,这意味着您还可以信任操作系统以正确实施文件访问权限。这反过来意味着可以将密钥存储在只有rails-user-process可以读取的文件中。

以这种方式思考:即使您根本没有密钥,如何阻止服务器上的攻击者只需更改应用程序代码本身即可访问已禁用的功能?

答案 1 :(得分:1)

我会使用只对文件所有者具有读访问权限的文件系统,并确保ruby进程是该用户拥有的唯一进程。 (使用chmod 400 file

你可以比这更复杂,但这一切都归结为使用unix用户和权限。

答案 2 :(得分:0)

在文件系统中对它进行大量加密?

答案 3 :(得分:0)

如果将其视为常规密码并使用salted hash呢?一旦用户进行身份验证,他就可以访问该网站的功能。