我有一个带有 hstore 的 Postgresql 数据库,它运行良好,只是我们现在需要将敏感信息放入 hstore,因此需要对信息进行加密。
有没有一种简单的方法(/什么是最佳实践)用 rails 加密 Hstore?
我有一个带有 hstore 的 Postgresql 数据库,它运行良好,只是我们现在需要将敏感信息放入 hstore,因此需要对信息进行加密。
有没有一种简单的方法(/什么是最佳实践)用 rails 加密 Hstore?
before_save
您可以在存储到数据库之前使用挂钩来加密哈希中的敏感属性,并after_initialize
在实例化记录时使用挂钩来解密。
像下面这样的东西应该可以工作:
class MyModel < ActiveRecord::Base
after_initialize :decrypt_sensitive
before_save :encrypt_sensitive
protected:
def encrypt_sensitive
props['some_attr'] = encrypt_and_mac(props['some_attr'])
props['another_attr'] = encrypt_and_mac(props['another_attr'])
end
def decrypt_sensitive
props['some_attr'] = decrypt_and_verify(props['some_attr'])
props['another_attr'] = decrypt_and_verify(props['another_attr'])
end
end
会有一些性能考虑,after_initialize
因此您可能希望考虑使用自定义访问器来懒惰地执行解密。
虽然我完全支持分层安全性,但如果没有对平台和密钥管理的额外控制,您将不会购买大量安全性。我特别避免了密码和加密模式、密钥长度、密钥管理等细节。您需要根据您自己和/或您的客户的风险评估获得通知(参见 ISO 27000 系列信息安全风险管理)。从技术上讲,您可能希望考虑使用带有消息身份验证的 AES,例如 CCM 或 OCB3,以便您可以检测静态数据是否已被篡改,但您仍然需要小心如何使用这些模式。
通常情况下,加密是一种被滥用的工具,它只会在本质上不安全的操作环境中提供一种错误的安全感。