Ruby on Rails - 为什么要加密某些数据?

时间:2015-10-19 14:48:21

标签: ruby-on-rails database security encryption attr-encrypted

加密数据

刚刚将attr_encrypted添加到某些模型后,我开始认为黑客的工作可能不那么难。

我在应用服务器的不同服务器上有一个数据库 - 但是,如果有人设法进入数据库服务器,该人也可以访问存储密钥的应用服务器(可能是假设是不正确的)因为它们具有相同类型的安全措施。

问题

Rails代码以可读文本格式存储在服务器上,因此可以访问密钥。当然,如果有人确实掌握了数据库,并保留了这些密钥,那么整个数据加密就变得无关紧要了,因为它只是(略微)延长了黑客解密信息的时间。

如果是这样,是否有进一步的安全措施,或者我完全错过了加密的概念?

我已经浏览了attr_encrypted gem以及相关的自述文件和问题,但找不到任何有用的东西。

2 个答案:

答案 0 :(得分:0)

attr_encrypted保护您的数据免受简单的数据泄露。想想NSA嗅探DC间电缆(您的数据库复制日志将被发送)或心怀不满的DBA(无法访问应用程序源)将所有数据转储到互联网中。

如果是实际违规行为,入侵者可能无法访问应用程序代码和数据库(取决于您的体系结构和安全措施)。如果他们两个都有,那么是的,这是游戏结束。

总而言之,拥有[敏感数据]比拥有它更好。我会说,没有伤害。

答案 1 :(得分:0)

不要将密钥放在应用服务器中,也不要将它们签入git存储库。

相反,使用环境变量。您可以使用不同的开发和生产方法。

在Heroku上很容易(例如)。

我有加密问题:

# app/models/concerns/encryption.rb

module Encryption

  extend ActiveSupport::Concern

  module ClassMethods
    def encryption_key
      ENV['ENCRYPT_KEY']
    end
  end

end

在模型中,我这样做

class User < ActiveRecord::Base

  include Encryption
  attr_encrypted :name, :key => encryption_key

end

在开发过程中,我使用.env文件存储密钥并与领班一起检索。