Active Record admite el cifrado a nivel de aplicación. Funciona declarando qué atributos deben ser cifrados y cifrándolos y descifrándolos de manera transparente cuando sea necesario. La capa de cifrado se sitúa entre la base de datos y la aplicación. La aplicación accederá a datos no cifrados, pero la base de datos los almacenará cifrados.
1 ¿Por qué cifrar datos a nivel de aplicación?
El cifrado de Active Record existe para proteger información sensible en su aplicación. Un ejemplo típico es la información personal identificable de los usuarios. Pero, ¿por qué querría cifrado a nivel de aplicación si ya está cifrando su base de datos en reposo?
Como beneficio práctico inmediato, cifrar atributos sensibles agrega una capa de seguridad adicional. Por ejemplo, si un atacante obtuviera acceso a su base de datos, una instantánea de la misma o a los registros de su aplicación, no podría entender la información cifrada. Además, el cifrado puede evitar que los desarrolladores expongan accidentalmente datos sensibles de los usuarios en los registros de la aplicación.
Pero más importante aún, al usar el cifrado de Active Record, define qué constituye información sensible en su aplicación a nivel de código. El cifrado de Active Record permite un control granular del acceso a los datos en su aplicación y servicios que consumen datos de su aplicación. Por ejemplo, considere consolas de Rails auditables que protegen datos cifrados o consulte el sistema integrado para filtrar automáticamente parámetros de controladores.
2 Uso básico
2.1 Configuración
Ejecute bin/rails db:encryption:init
para generar un conjunto de claves aleatorias:
$ bin/rails db:encryption:init
Agregue esta entrada a las credenciales del entorno objetivo:
active_record_encryption:
primary_key: EGY8WhulUOXixybod7ZWwMIL68R9o5kC
deterministic_key: aPA5XyALhf75NNnMzaspW7akTfZp0lPY
key_derivation_salt: xEY0dt6TZcAMg52K7O84wYzkjvbA62Hz
Estos valores se pueden almacenar copiando y pegando los valores generados en sus credenciales de Rails existentes. Alternativamente, estos valores se pueden configurar desde otras fuentes, como variables de entorno:
config.active_record.encryption.primary_key = ENV['ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY']
config.active_record.encryption.deterministic_key = ENV['ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY']
config.active_record.encryption.key_derivation_salt = ENV['ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT']
NOTA: Estos valores generados tienen una longitud de 32 bytes. Si los genera usted mismo, las longitudes mínimas que debe usar son 12 bytes para la clave primaria (esto se utilizará para derivar la clave AES de 32 bytes) y 20 bytes para la sal.
2.2 Declaración de Atributos Cifrados
Los atributos cifrables se definen a nivel del modelo. Estos son atributos regulares de Active Record respaldados por una columna con el mismo nombre.
class Article < ApplicationRecord
encrypts :title
end
La biblioteca cifrará de manera transparente estos atributos antes de guardarlos en la base de datos y los descifrará al recuperarlos:
article = Article.create title: "¡Cifrar todo!"
article.title # => "¡Cifrar todo!"
Pero, bajo el capó, el SQL ejecutado se ve así:
INSERT INTO `articles` (`title`) VALUES ('{\"p\":\"n7J0/ol+a7DRMeaE\",\"h\":{\"iv\":\"DXZMDWUKfp3bg/Yu\",\"at\":\"X1/YjMHbHD4talgF9dt61A==\"}}')
2.2.1 Importante: Sobre el Almacenamiento y el Tamaño de la Columna
El cifrado requiere espacio adicional debido a la codificación Base64 y a los metadatos almacenados junto con las cargas cifradas. Al utilizar el proveedor de clave de cifrado de sobre integrado, puede estimar el peor caso de sobrecarga en alrededor de 255 bytes. Esta sobrecarga es insignificante en tamaños mayores. No solo porque se diluye, sino porque la biblioteca utiliza compresión por defecto, lo que puede ofrecer hasta un 30% de ahorro de almacenamiento sobre la versión no cifrada para cargas más grandes.
Hay una preocupación importante sobre los tamaños de las columnas de cadena: en las bases de datos modernas, el tamaño de la columna determina el número de caracteres que puede asignar, no el número de bytes. Por ejemplo, con UTF-8, cada carácter puede ocupar hasta cuatro bytes, por lo que, potencialmente, una columna en una base de datos que use UTF-8 puede almacenar hasta cuatro veces su tamaño en términos de número de bytes. Ahora, las cargas cifradas son cadenas binarias serializadas como Base64, por lo que pueden almacenarse en columnas string
regulares. Debido a que son una secuencia de bytes ASCII, una columna cifrada puede ocupar hasta cuatro veces el tamaño de su versión clara. Por lo tanto, incluso si los bytes almacenados en la base de datos son los mismos, la columna debe ser cuatro veces más grande.
En la práctica, esto significa:
- Al cifrar textos cortos escritos en alfabetos occidentales (principalmente caracteres ASCII), debe tener en cuenta esa sobrecarga adicional de 255 al definir el tamaño de la columna.
- Al cifrar textos cortos escritos en alfabetos no occidentales, como el cirílico, debe multiplicar el tamaño de la columna por 4. Tenga en cuenta que la sobrecarga de almacenamiento es de 255 bytes como máximo.
- Al cifrar textos largos, puede ignorar las preocupaciones sobre el tamaño de la columna.
Algunos ejemplos:
Contenido a cifrar | Tamaño original de la columna | Tamaño recomendado de la columna cifrada | Sobrecarga de almacenamiento (peor caso) |
---|---|---|---|
Direcciones de correo electrónico | string(255) | string(510) | 255 bytes |
Secuencia corta de emojis | string(255) | string(1020) | 255 bytes |
Resumen de textos escritos en alfabetos no occidentales | string(500) | string(2000) | 255 bytes |
Texto largo arbitrario | text | text | insignificante |
2.3 Cifrado Determinista y No Determinista
Por defecto, el cifrado de Active Record utiliza un enfoque no determinista para el cifrado. No determinista, en este contexto, significa que cifrar el mismo contenido con la misma contraseña dos veces resultará en diferentes textos cifrados. Este enfoque mejora la seguridad al dificultar el criptoanálisis de los textos cifrados y hacer imposible consultar la base de datos.
Puede utilizar la opción deterministic:
para generar vectores de inicialización de manera determinista, habilitando efectivamente la consulta de datos cifrados.
class Author < ApplicationRecord
encrypts :email, deterministic: true
end
Author.find_by_email("some@email.com") # Puede consultar el modelo normalmente
Se recomienda el enfoque no determinista a menos que necesite consultar los datos.
NOTA: En modo no determinista, Active Record utiliza AES-GCM con una clave de 256 bits y un vector de inicialización aleatorio. En modo determinista, también utiliza AES-GCM, pero el vector de inicialización se genera como un digest HMAC-SHA-256 de la clave y los contenidos a cifrar.
NOTA: Puede desactivar el cifrado determinista omitiendo una deterministic_key
.
3 Características
3.1 Action Text
Puede cifrar atributos de Action Text pasando encrypted: true
en su declaración.
class Message < ApplicationRecord
has_rich_text :content, encrypted: true
end
NOTA: Aún no se admite pasar opciones de cifrado individuales a los atributos de Action Text. Utilizará cifrado no determinista con las opciones de cifrado globales configuradas.
3.2 Fixtures
Puede obtener fixtures de Rails cifrados automáticamente agregando esta opción a su test.rb
:
config.active_record.encryption.encrypt_fixtures = true
Cuando está habilitado, todos los atributos cifrables se cifrarán según la configuración de cifrado definida en el modelo.
3.2.1 Fixtures de Action Text
Para cifrar fixtures de Action Text, debe colocarlos en fixtures/action_text/encrypted_rich_texts.yml
.
3.3 Tipos Soportados
active_record.encryption
serializará valores utilizando el tipo subyacente antes de cifrarlos, pero, a menos que use un message_serializer
personalizado, deben ser serializables como cadenas. Los tipos estructurados como serialized
son compatibles de forma predeterminada.
Si necesita admitir un tipo personalizado, la forma recomendada es usar un atributo serializado. La declaración del atributo serializado debe ir antes de la declaración de cifrado:
# CORRECTO
class Article < ApplicationRecord
serialize :title, type: Title
encrypts :title
end
# INCORRECTO
class Article < ApplicationRecord
encrypts :title
serialize :title, type: Title
end
3.4 Ignorar Mayúsculas y Minúsculas
Puede que necesite ignorar las mayúsculas y minúsculas al consultar datos cifrados de manera determinista. Dos enfoques facilitan esto:
Puede usar la opción :downcase
al declarar el atributo cifrado para convertir el contenido a minúsculas antes de que ocurra el cifrado.
class Person
encrypts :email_address, deterministic: true, downcase: true
end
Cuando se usa :downcase
, se pierde el caso original. En algunas situaciones, puede que quiera ignorar el caso solo al consultar mientras también almacena el caso original. Para esas situaciones, puede usar la opción :ignore_case
. Esto requiere que agregue una nueva columna llamada original_<column_name>
para almacenar el contenido sin cambiar el caso:
class Label
encrypts :name, deterministic: true, ignore_case: true # el contenido con el caso original se almacenará en la columna `original_name`
end
3.5 Soporte para Datos No Cifrados
Para facilitar las migraciones de datos no cifrados, la biblioteca incluye la opción config.active_record.encryption.support_unencrypted_data
. Cuando está configurada en true
:
- Intentar leer atributos cifrados que no están cifrados funcionará normalmente, sin generar ningún error.
- Las consultas con atributos cifrados de manera determinista incluirán la versión "texto claro" de ellos para admitir la búsqueda de contenido cifrado y no cifrado. Debe configurar
config.active_record.encryption.extend_queries = true
para habilitar esto.
Esta opción está destinada a ser utilizada durante períodos de transición mientras los datos claros y cifrados deben coexistir. Ambos están configurados en false
de forma predeterminada, que es el objetivo recomendado para cualquier aplicación: se generarán errores al trabajar con datos no cifrados.
3.6 Soporte para Esquemas de Cifrado Anteriores
Cambiar las propiedades de cifrado de los atributos puede romper los datos existentes. Por ejemplo, imagine que quiere hacer un atributo determinista no determinista. Si simplemente cambia la declaración en el modelo, la lectura de textos cifrados existentes fallará porque el método de cifrado es diferente ahora.
Para admitir estas situaciones, puede declarar esquemas de cifrado anteriores que se utilizarán en dos escenarios:
- Al leer datos cifrados, el cifrado de Active Record intentará esquemas de cifrado anteriores si el esquema actual no funciona.
- Al consultar datos deterministas, agregará textos cifrados utilizando esquemas anteriores para que las consultas funcionen sin problemas con datos cifrados con diferentes esquemas. Debe configurar
config.active_record.encryption.extend_queries = true
para habilitar esto.
Puede configurar esquemas de cifrado anteriores:
- A nivel global
- Por atributo
3.6.1 Esquemas de Cifrado Anteriores Globales
Puede agregar esquemas de cifrado anteriores agregándolos como una lista de propiedades utilizando la propiedad de configuración previous
en su application.rb
:
config.active_record.encryption.previous = [ { key_provider: MyOldKeyProvider.new } ]
3.6.2 Esquemas de Cifrado por Atributo
Use :previous
al declarar el atributo:
class Article
encrypts :title, deterministic: true, previous: { deterministic: false }
end
3.6.3 Esquemas de Cifrado y Atributos Deterministas
Al agregar esquemas de cifrado anteriores:
- Con cifrado no determinista, la nueva información siempre se cifrará con el esquema de cifrado más reciente (actual).
- Con cifrado determinista, la nueva información siempre se cifrará con el esquema de cifrado más antiguo de manera predeterminada.
Típicamente, con el cifrado determinista, se desea que los textos cifrados permanezcan constantes. Puede cambiar este comportamiento configurando deterministic: { fixed: false }
. En ese caso, utilizará el esquema de cifrado más reciente para cifrar datos nuevos.
3.7 Restricciones Únicas
NOTA: Las restricciones únicas solo se pueden usar con datos cifrados de manera determinista.
3.7.1 Validaciones Únicas
Las validaciones únicas son compatibles normalmente siempre que las consultas extendidas estén habilitadas (config.active_record.encryption.extend_queries = true
).
class Person
validates :email_address, uniqueness: true
encrypts :email_address, deterministic: true, downcase: true
end
También funcionarán al combinar datos cifrados y no cifrados, y al configurar esquemas de cifrado anteriores.
NOTA: Si desea ignorar el caso, asegúrese de usar downcase:
o ignore_case:
en la declaración encrypts
. Usar la opción case_sensitive:
en la validación no funcionará.
3.7.2 Índices Únicos
Para admitir índices únicos en columnas cifradas de manera determinista, debe asegurarse de que su texto cifrado nunca cambie.
Para fomentar esto, los atributos deterministas siempre usarán el esquema de cifrado más antiguo disponible de manera predeterminada cuando se configuren múltiples esquemas de cifrado. De lo contrario, es su responsabilidad asegurarse de que las propiedades de cifrado no cambien para estos atributos, o los índices únicos no funcionarán.
class Person
encrypts :email_address, deterministic: true
end
3.8 Filtrado de Parámetros Nombrados como Columnas Cifradas
Por defecto, las columnas cifradas están configuradas para ser filtradas automáticamente en los registros de Rails. Puede desactivar este comportamiento agregando lo siguiente a su application.rb
:
config.active_record.encryption.add_to_filter_parameters = false
Si el filtrado está habilitado, pero desea excluir columnas específicas del filtrado automático, agréguelas a config.active_record.encryption.excluded_from_filter_parameters
:
config.active_record.encryption.excluded_from_filter_parameters = [:catchphrase]
Al generar el parámetro de filtro, Rails usará el nombre del modelo como prefijo. Por ejemplo: para Person#name
, el parámetro de filtro será person.name
.
3.9 Codificación
La biblioteca preservará la codificación para valores de cadena cifrados de manera no determinista.
Debido a que la codificación se almacena junto con la carga cifrada, los valores cifrados de manera determinista forzarán la codificación UTF-8 de manera predeterminada. Por lo tanto, el mismo valor con una codificación diferente resultará en un texto cifrado diferente al cifrarlo. Generalmente, querrá evitar esto para mantener las consultas y las restricciones de unicidad funcionando, por lo que la biblioteca realizará la conversión automáticamente en su nombre.
Puede configurar la codificación predeterminada deseada para el cifrado determinista con:
config.active_record.encryption.forced_encoding_for_deterministic_encryption = Encoding::US_ASCII
Y puede desactivar este comportamiento y preservar la codificación en todos los casos con:
config.active_record.encryption.forced_encoding_for_deterministic_encryption = nil
4 Gestión de Claves
Los proveedores de claves implementan estrategias de gestión de claves. Puede configurar proveedores de claves a nivel global o por atributo.
4.1 Proveedores de Claves Integrados
4.1.1 DerivedSecretKeyProvider
Un proveedor de claves que servirá claves derivadas de las contraseñas proporcionadas utilizando PBKDF2.
config.active_record.encryption.key_provider = ActiveRecord::Encryption::DerivedSecretKeyProvider.new(["algunas contraseñas", "de las que derivar claves. ", "Estas deben estar en", "credenciales"])
NOTA: Por defecto, active_record.encryption
configura un DerivedSecretKeyProvider
con las claves definidas en active_record.encryption.primary_key
.
4.1.2 EnvelopeEncryptionKeyProvider
Implementa una estrategia simple de cifrado de sobre:
- Genera una clave aleatoria para cada operación de cifrado de datos
- Almacena la clave de datos con los datos mismos, cifrada con una clave primaria definida en la credencial
active_record.encryption.primary_key
.
Puede configurar Active Record para usar este proveedor de claves agregando esto a su application.rb
:
config.active_record.encryption.key_provider = ActiveRecord::Encryption::EnvelopeEncryptionKeyProvider.new
Como con otros proveedores de claves integrados, puede proporcionar una lista de claves primarias en active_record.encryption.primary_key
para implementar esquemas de rotación de claves.
4.2 Proveedores de Claves Personalizados
Para esquemas de gestión de claves más avanzados, puede configurar un proveedor de claves personalizado en un inicializador:
ActiveRecord::Encryption.key_provider = MyKeyProvider.new
Un proveedor de claves debe implementar esta interfaz:
class MyKeyProvider
def encryption_key
end
def decryption_keys(encrypted_message)
end
end
Ambos métodos devuelven objetos ActiveRecord::Encryption::Key
:
encryption_key
devuelve la clave utilizada para cifrar algún contenidodecryption keys
devuelve una lista de claves potenciales para descifrar un mensaje dado
Una clave puede incluir etiquetas arbitrarias que se almacenarán sin cifrar con el mensaje. Puede usar ActiveRecord::Encryption::Message#headers
para examinar esos valores al descifrar.
4.3 Proveedores de Claves Específicos del Modelo
Puede configurar un proveedor de claves por clase con la opción :key_provider
:
class Article < ApplicationRecord
encrypts :summary, key_provider: ArticleKeyProvider.new
end
4.4 Claves Específicas del Modelo
Puede configurar una clave dada por clase con la opción :key
:
class Article < ApplicationRecord
encrypts :summary, key: "alguna clave secreta para resúmenes de artículos"
end
Active Record utiliza la clave para derivar la clave utilizada para cifrar y descifrar los datos.
4.5 Rotación de Claves
active_record.encryption
puede trabajar con listas de claves para admitir la implementación de esquemas de rotación de claves:
- La última clave se utilizará para cifrar contenido nuevo.
- Todas las claves se intentarán al descifrar contenido hasta que una funcione.
active_record_encryption:
primary_key:
- a1cc4d7b9f420e40a337b9e68c5ecec6 # Las claves anteriores aún pueden descifrar contenido existente
- bc17e7b413fd4720716a7633027f8cc4 # Activa, cifra nuevo contenido
key_derivation_salt: a3226b97b3b2f8372d1fc6d497a0c0d3
Esto habilita flujos de trabajo en los que mantiene una lista corta de claves agregando nuevas claves, recifrando contenido y eliminando claves antiguas.
NOTA: La rotación de claves no se admite actualmente para el cifrado determinista.
NOTA: El cifrado de Active Record aún no proporciona gestión automática de procesos de rotación de claves. Todas las piezas están allí, pero esto aún no se ha implementado.
4.6 Almacenamiento de Referencias de Claves
Puede configurar active_record.encryption.store_key_references
para hacer que active_record.encryption
almacene una referencia a la clave de cifrado en el mensaje cifrado mismo.
config.active_record.encryption.store_key_references = true
Hacer esto permite un descifrado más eficiente porque el sistema ahora puede localizar claves directamente en lugar de probar listas de claves. El precio a pagar es el almacenamiento: los datos cifrados serán un poco más grandes.
5 API
5.1 API Básica
El cifrado de ActiveRecord está destinado a ser utilizado de manera declarativa, pero ofrece una API para escenarios de uso avanzado.
5.1.1 Cifrar y Descifrar
article.encrypt # cifra o recifra todos los atributos cifrables
article.decrypt # descifra todos los atributos cifrables
5.1.2 Leer Texto Cifrado
article.ciphertext_for(:title)
5.1.3 Comprobar si el Atributo está Cifrado o No
article.encrypted_attribute?(:title)
6 Configuración
6.1 Opciones de Configuración
Puede configurar las opciones de cifrado de Active Record en su application.rb
(el escenario más común) o en un archivo de configuración de entorno específico config/environments/<env name>.rb
si desea configurarlas por entorno.
ADVERTENCIA: Se recomienda utilizar el soporte de credenciales integrado de Rails para almacenar claves. Si prefiere configurarlas manualmente a través de propiedades de configuración, asegúrese de no comprometerlas con su código (por ejemplo, use variables de entorno).
6.1.1 config.active_record.encryption.support_unencrypted_data
Cuando es verdadero, los datos no cifrados se pueden leer normalmente. Cuando es falso, generará errores. Predeterminado: false
.
6.1.2 config.active_record.encryption.extend_queries
Cuando es verdadero, las consultas que hacen referencia a atributos cifrados de manera determinista se modificarán para incluir valores adicionales si es necesario. Esos valores adicionales serán la versión en texto claro del valor (cuando config.active_record.encryption.support_unencrypted_data
sea verdadero) y valores cifrados con esquemas de cifrado anteriores, si los hay (según lo proporcionado con la opción previous:
). Predeterminado: false
(experimental).
6.1.3 config.active_record.encryption.encrypt_fixtures
Cuando es verdadero, los atributos cifrables en los fixtures se cifrarán automáticamente al cargarlos. Predeterminado: false
.
6.1.4 config.active_record.encryption.store_key_references
Cuando es verdadero, se almacena una referencia a la clave de cifrado en los encabezados del mensaje cifrado. Esto permite un descifrado más rápido cuando se utilizan múltiples claves. Predeterminado: false
.
6.1.5 config.active_record.encryption.add_to_filter_parameters
Cuando es verdadero, los nombres de los atributos cifrados se agregan automáticamente a config.filter_parameters
y no se mostrarán en los registros. Predeterminado: true
.
6.1.6 config.active_record.encryption.excluded_from_filter_parameters
Puede configurar una lista de parámetros que no se filtrarán cuando config.active_record.encryption.add_to_filter_parameters
sea verdadero. Predeterminado: []
.
6.1.7 config.active_record.encryption.validate_column_size
Agrega una validación basada en el tamaño de la columna. Esto se recomienda para evitar almacenar valores enormes utilizando cargas altamente comprimibles. Predeterminado: true
.
6.1.8 config.active_record.encryption.primary_key
La clave o listas de claves utilizadas para derivar claves de cifrado de datos raíz. La forma en que se utilizan depende del proveedor de claves configurado. Es preferible configurarlo a través de la credencial active_record_encryption.primary_key
.
6.1.9 config.active_record.encryption.deterministic_key
La clave o lista de claves utilizadas para el cifrado determinista. Es preferible configurarlo a través de la credencial active_record_encryption.deterministic_key
.
6.1.10 config.active_record.encryption.key_derivation_salt
La sal utilizada al derivar claves. Es preferible configurarlo a través de la credencial active_record_encryption.key_derivation_salt
.
6.1.11 config.active_record.encryption.forced_encoding_for_deterministic_encryption
La codificación predeterminada para atributos cifrados de manera determinista. Puede desactivar la codificación forzada configurando esta opción en nil
. Es Encoding::UTF_8
de manera predeterminada.
6.1.12 config.active_record.encryption.hash_digest_class
El algoritmo de resumen utilizado para derivar claves. OpenSSL::Digest::SHA256
de manera predeterminada.
6.1.13 config.active_record.encryption.support_sha1_for_non_deterministic_encryption
Admite el descifrado de datos cifrados de manera no determinista con una clase de resumen SHA1. El valor predeterminado es falso, lo que significa que solo admitirá el algoritmo de resumen configurado en config.active_record.encryption.hash_digest_class
.
6.2 Contextos de Cifrado
Un contexto de cifrado define los componentes de cifrado que se utilizan en un momento dado. Hay un contexto de cifrado predeterminado basado en su configuración global, pero puede configurar un contexto personalizado para un atributo dado o al ejecutar un bloque específico de código.
NOTA: Los contextos de cifrado son un mecanismo de configuración flexible pero avanzado. La mayoría de los usuarios no deberían preocuparse por ellos.
Los componentes principales de los contextos de cifrado son:
encryptor
: expone la API interna para cifrar y descifrar datos. Interactúa con unkey_provider
para construir mensajes cifrados y manejar su serialización. El cifrado/descifrado en sí mismo lo realiza elcipher
y la serialización pormessage_serializer
.cipher
: el algoritmo de cifrado en sí mismo (AES 256 GCM)key_provider
: proporciona claves de cifrado y descifrado.message_serializer
: serializa y deserializa cargas cifradas (Message
).
NOTA: Si decide construir su propio message_serializer
, es importante usar mecanismos seguros que no puedan deserializar objetos arbitrarios. Un escenario comúnmente admitido es cifrar datos no cifrados existentes. Un atacante puede aprovechar esto para ingresar una carga manipulada antes de que ocurra el cifrado y realizar ataques RCE. Esto significa que los serializadores personalizados deben evitar Marshal
, YAML.load
(use YAML.safe_load
en su lugar) o JSON.load
(use JSON.parse
en su lugar).
6.2.1 Contexto de Cifrado Global
El contexto de cifrado global es el que se utiliza de forma predeterminada y se configura como otras propiedades de configuración en su application.rb
o archivos de configuración de entorno.
config.active_record.encryption.key_provider = ActiveRecord::Encryption::EnvelopeEncryptionKeyProvider.new
config.active_record.encryption.encryptor = MyEncryptor.new
6.2.2 Contextos de Cifrado por Atributo
Puede anular los parámetros del contexto de cifrado pasándolos en la declaración del atributo:
class Attribute
encrypts :title, encryptor: MyAttributeEncryptor.new
end
6.2.3 Contexto de Cifrado al Ejecutar un Bloque de Código
Puede usar ActiveRecord::Encryption.with_encryption_context
para establecer un contexto de cifrado para un bloque de código dado:
ActiveRecord::Encryption.with_encryption_context(encryptor: ActiveRecord::Encryption::NullEncryptor.new) do
# ...
end
6.2.4 Contextos de Cifrado Integrados
6.2.4.1 Desactivar Cifrado
Puede ejecutar código sin cifrado:
ActiveRecord::Encryption.without_encryption do
# ...
end
Esto significa que leer texto cifrado devolverá el texto cifrado, y el contenido guardado se almacenará sin cifrar.
6.2.4.2 Proteger Datos Cifrados
Puede ejecutar código sin cifrado pero evitar sobrescribir contenido cifrado:
ActiveRecord::Encryption.protecting_encrypted_data do
# ...
end
Esto puede ser útil si desea proteger los datos cifrados mientras ejecuta código arbitrario contra ellos (por ejemplo, en una consola de Rails).
Comentarios
Se te anima a ayudar a mejorar la calidad de esta guía.
Por favor contribuye si ves algún error tipográfico o errores fácticos. Para comenzar, puedes leer nuestra sección de contribuciones a la documentación.
También puedes encontrar contenido incompleto o cosas que no están actualizadas. Por favor agrega cualquier documentación faltante para main. Asegúrate de revisar Guías Edge primero para verificar si los problemas ya están resueltos o no en la rama principal. Revisa las Guías de Ruby on Rails para estilo y convenciones.
Si por alguna razón detectas algo que corregir pero no puedes hacerlo tú mismo, por favor abre un issue.
Y por último, pero no menos importante, cualquier tipo de discusión sobre la documentación de Ruby on Rails es muy bienvenida en el Foro oficial de Ruby on Rails.