代码之家  ›  专栏  ›  技术社区  ›  Oleg Shaldybin

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

  •  2
  • Oleg Shaldybin  · 技术社区  · 15 年前

    我的一个Rails应用程序将依赖于内存中的一个密钥,因此只有当管理员转到某个页面并上载有效密钥时,它的所有功能才可用。

    问题是这个密钥需要安全地存储,所以同一台机器上的任何其他进程都不能访问它(所以memcached和filesystem不适合)。一个好主意是将其存储在应用程序中的某个配置变量中,但新生成的实例将无法访问该变量。有没有想过如何在Rubye/Apache/Mod_乘客身上实现这一点?

    4 回复  |  直到 15 年前
        1
  •  3
  •   levinalex    15 年前

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

    你不能对操作系统保密。您的应用程序必须在内存中的某个地方有这个键,操作系统内核可以读取它想要读取的任何内存位置。

    您需要能够信任操作系统,这意味着您也可以信任操作系统来正确地强制执行文件访问权限。这反过来意味着可以将密钥存储在只有Rails用户进程可以读取的文件中。

    这样想:即使您根本没有密钥,如何阻止服务器上的攻击者简单地更改应用程序代码本身以获得对禁用功能的访问?

        2
  •  1
  •   yhager    15 年前

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

    您可以变得比这更复杂,但归根结底就是使用Unix用户和权限。

        3
  •  0
  •   Saurabh Sharan    15 年前

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

        4
  •  0
  •   Todd Gardner    15 年前

    把它当作普通密码,然后使用 salted hash ?一旦用户认证,他就可以访问网站的功能。