【问题标题】:How to store variables passed to a Ruby class when initializing securely so that they can be accessed by other methods?如何在安全初始化时存储传递给 Ruby 类的变量,以便其他方法可以访问它们?
【发布时间】:2015-08-14 14:05:49
【问题描述】:

我需要知道如何在初始化时安全地存储传递给 Ruby 类的参数,如下所示...

 myclass = MyClass.new(auth_token)

...以便类中的其他方法可以访问它以执行如下操作:

myclass.do_something

我传递的参数非常敏感,因此安全性应该是最高优先级。我怎样才能做到这一点?

【问题讨论】:

  • @Adrian 对不起,我不是这样的专家。这就是为什么我说securely 没有具体说明。我需要确保没有人可以修改这些数据。除了类内部的方法,没有人可以得到这些数据。
  • 具体告诉我您不希望谁或什么能够访问数据。如果您正在谈论在同一 ruby​​ 进程中运行的其他代码,那么您尝试做的事情是不可能的。
  • @Adrian 我试图在应用程序启动时初始化这个类。会不会不安全?
  • 定义“入侵者”。很抱歉,我可能听起来像是一张破唱片,但如果没有更多上下文,像“安全”和“入侵者”这样的词真的没有任何意义。您可能不需要修改 ruby​​ 代码以确保其安全,而只需保护运行它的任何计算机或服务器。
  • @EApubs:“不太了解它可能面临的威胁。” – 好吧,例如,有人可能会闯入您的家,绑架您的妻子和孩子并强迫您交出root密码。有人可能会闯入数据中心并窃取服务器。有人可能会用超硬 X 射线摧毁服务器,这会将内存的当前内容“烧”到 RAM 芯片中,从而可以在窃取服务器后甚至数小时后取回它。有人可能闯入数据中心并在核心交换机上安装网络嗅探器。有人可能会付钱给清洁工……

标签: ruby-on-rails ruby


【解决方案1】:

您可以在存储之前对值进行加密,然后存储加密后的值。

然后,当您要检索它时,您将对其进行解密,然后显示该值。

您可以使用 ruby​​ OpenSSL::CipherDigest使用 AES-128/AES-256 加密数据

Here is a post I made showing how to use the libraries to encrypt-decrypt whatever values you want.

请记住,您需要跟踪您的 key初始化向量

【讨论】:

  • 太棒了。如何使其可用于同一类中的其他私有方法?
  • 通过编写处理加密/解密的方法,然后在其他私有函数中调用它们或以任何其他方式将这些方法链接在一起。当您对要编写的代码没有更多描述性时,很难回答。
【解决方案2】:

如果入侵者包括可以在您的进程中运行 ruby​​ 代码的人,那么这是无法做到的。

Ruby 允许调用私有方法、读取实例变量等等。即使您加密了数据,可以在您的 ruby​​ 进程中运行代码的人也可以修改加密方法以不做任何事情或获得对加密密钥的访问权

【讨论】:

  • 所以除了将它们定义为实例变量之外别无选择?
  • 不。我更担心这些数据如何存储在磁盘上(如果有的话),而不是如何存储在内存中。
  • 啊,是的。这是个大问题
  • 我正在考虑使用figaro gem 将其存储在配置文件中。是否足够安全?我将能够使用ENV 命令访问它
  • 对什么足够安全?您的威胁模型是什么?
猜你喜欢
  • 2012-11-01
  • 2011-07-09
  • 2018-06-11
  • 2013-06-04
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
相关资源
最近更新 更多