【问题标题】:How can I secure my OAUTH secret in Phusion Passenger Sinatra app?如何在 Phusion Passenger Sinatra 应用程序中保护我的 OAUTH 密码?
【发布时间】:2010-08-01 13:52:31
【问题描述】:

我有一个使用单用户 OAUTH 令牌的应用。我可以将四个值(消费者密钥/秘密、令牌/秘密)直接存储在应用程序中,但不建议这样做,我不希望将秘密签入源代码。该应用程序不使用数据库。我知道无论我如何存储它们,有权访问服务器的人都可以弄清楚它们,但我想至少从源代码中得到它。我曾考虑将它们作为乘客环境变量传递或将它们存储在服务器上的单独文件中,但有更好的方法吗?加密它们有什么意义,因为任何可以看到它们的人也将具有解密所需的访问权限?

【问题讨论】:

    标签: oauth sinatra passenger


    【解决方案1】:

    实际上没有将密钥存储在源代码中实际上是一种糟糕的做法,以适应最敏捷的设置 (continuous deployment)。

    但是,按照您的说法,您希望有两个团队:可以编写代码的团队和可以部署代码的团队。可以部署它的人可以访问密钥,并且在最安全的设置中,不得使用应用程序的代码。您可以通过让那些编码验证到代理所有授权部分并验证应用程序的系统来使 oauth 仍然有效。此类密钥(app -> auth 中间人)可以在存储库中,因为它们是内部的。

    任何其他设置:由可以部署的人创建的身份验证库、加密的密钥,以及其他任何东西都可以被编写代码的人破坏。如果您不够信任他们无法访问密钥,那么您可能不够信任他们而不会尝试越狱密钥。

    由此产生的部署方案要复杂得多,因此更容易出错。但是,否则,它会更安全。您仍然必须信任某个人,例如安装操作系统的人、代理的系统中间件、维护代理机器的人、可以长期使用它的人等等。如果有权访问密钥的人足够小,并且您信任他们,那么您就获得了安全性。否则,您将失去安全感、对变化做出响应的能力,并浪费很多人的时间。

    很遗憾,所有授权方案都要求您信任某人。没有办法解决它。这对任何应用程序/框架/授权方案都有效,不仅是 sinatra、rails、oauth、java、rsa 签名、椭圆曲线等。

    【讨论】:

    • 这是一个很好的、彻底的答案。就我而言,部署者(我)是唯一的开发者,所以我将通过环境变量传递密钥。如果有人能访问这台机器,我遇到的问题比我的 OAUTH 机密还要多。
    • 如果是这种情况,您可以通过要求密码来解密应用程序启动时的每个敏感数据,从而限制您在机器受到威胁时所面临的危险。但是,如果机器受到威胁,攻击者可以更改应用程序以告诉他们密码,然后杀死应用程序,迫使您重新启动它(因此,提供密码)。结合入侵检测工具,这几乎是安全的。您仍然会信任您的操作系统、中间件、工具和库,但是,正如我所说,您必须始终信任某人。
    猜你喜欢
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多