Active Record admite la encriptación a nivel de aplicación. Funciona declarando qué atributos deben ser encriptados y encriptándolos y desencriptándolos de manera transparente cuando sea necesario. La capa de encriptación se encuentra entre la base de datos y la aplicación. La aplicación accederá a los datos no encriptados, pero la base de datos los almacenará encriptados.
1 ¿Por qué encriptar datos a nivel de aplicación?
La encriptación de Active Record existe para proteger la información sensible en tu aplicación. Un ejemplo típico es la información de identificación personal de los usuarios. Pero, ¿por qué querrías una encriptación a nivel de aplicación si ya estás encriptando tu base de datos en reposo?
Como beneficio práctico inmediato, encriptar atributos sensibles agrega una capa de seguridad adicional. Por ejemplo, si un atacante obtuviera acceso a tu base de datos, una instantánea de la misma o los registros de tu aplicación, no podrían entender la información encriptada. Además, la encriptación puede evitar que los desarrolladores expongan involuntariamente datos sensibles de los usuarios en los registros de la aplicación.
Pero lo más importante es que, al utilizar la encriptación de Active Record, defines qué información se considera sensible en tu aplicación a nivel de código. La encriptación de Active Record permite un control granular del acceso a los datos en tu aplicación y en los servicios que consumen datos de tu aplicación. Por ejemplo, considera consolas de Rails auditables que protegen datos encriptados o verifica el sistema incorporado para filtrar automáticamente los parámetros del controlador.
2 Uso básico
2.1 Configuración
Primero, necesitas agregar algunas claves a tus credenciales de Rails. Ejecuta bin/rails db:encryption:init
para generar un conjunto de claves aleatorias:
$ bin/rails db:encryption:init
Agrega esta entrada a las credenciales del entorno objetivo:
active_record_encryption:
primary_key: EGY8WhulUOXixybod7ZWwMIL68R9o5kC
deterministic_key: aPA5XyALhf75NNnMzaspW7akTfZp0lPY
key_derivation_salt: xEY0dt6TZcAMg52K7O84wYzkjvbA62Hz
NOTA: Estos valores generados tienen una longitud de 32 bytes. Si los generas tú mismo, las longitudes mínimas que debes usar son 12 bytes para la clave primaria (que se utilizará para derivar la clave AES de 32 bytes) y 20 bytes para la sal.
2.2 Declaración de Atributos Encriptados
Los atributos encriptables 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 encriptará estos atributos de manera transparente antes de guardarlos en la base de datos y los desencriptará al recuperarlos:
article = Article.create title: "¡Encripta todo!"
article.title # => "¡Encripta todo!"
Pero, en realidad, la ejecución de SQL se ve así:
INSERT INTO `articles` (`title`) VALUES ('{\"p\":\"n7J0/ol+a7DRMeaE\",\"h\":{\"iv\":\"DXZMDWUKfp3bg/Yu\",\"at\":\"X1/YjMHbHD4talgF9dt61A==\"}}')
2.2.1 Importante: Sobre Almacenamiento y Tamaño de Columna
La encriptación requiere espacio adicional debido a la codificación Base64 y los metadatos almacenados junto con las cargas encriptadas. Cuando se utiliza el proveedor de claves de encriptación de sobre, puedes estimar el sobrecosto máximo en alrededor de 255 bytes. Este sobrecosto es insignificante en tamaños más grandes. No solo porque se diluye, sino porque la biblioteca utiliza compresión de forma predeterminada, lo que puede ofrecer ahorros de almacenamiento de hasta un 30% en comparación con la versión no encriptada para cargas más grandes.
Existe una preocupación importante sobre los tamaños de columna de cadena: en las bases de datos modernas, el tamaño de 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 utiliza UTF-8 puede almacenar hasta cuatro veces su tamaño en términos de número de bytes. Ahora, las cargas encriptadas son cadenas binarias serializadas como Base64, por lo que se pueden almacenar en columnas string
regulares. Debido a que son una secuencia de bytes ASCII, una columna encriptada puede ocupar hasta cuatro veces el tamaño de su versión sin encriptar. Entonces, 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 encriptar textos cortos escritos en alfabetos occidentales (principalmente caracteres ASCII), debes tener en cuenta esos 255 bytes adicionales al definir el tamaño de la columna.
- Al encriptar textos cortos escritos en alfabetos no occidentales, como el cirílico, debes multiplicar el tamaño de la columna por 4. Ten en cuenta que el sobrecosto de almacenamiento es de 255 bytes como máximo.
- Al encriptar textos largos, puedes ignorar las preocupaciones sobre el tamaño de la columna. Algunos ejemplos:
Contenido a encriptar | Tamaño de columna original | Tamaño recomendado de columna encriptada | 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 arbitrariamente largo | text | text | insignificante |
2.3 Encriptación determinista y no determinista
Por defecto, Active Record Encryption utiliza un enfoque no determinista para la encriptación. No determinista, en este contexto, significa que encriptar el mismo contenido con la misma contraseña dos veces dará como resultado diferentes textos cifrados. Este enfoque mejora la seguridad al dificultar el criptoanálisis de los textos cifrados y hacer que las consultas a la base de datos sean imposibles.
Puede utilizar la opción deterministic:
para generar vectores de inicialización de manera determinista, lo que permite consultar datos encriptados.
class Author < ApplicationRecord
encrypts :email, deterministic: true
end
Author.find_by_email("[email protected]") # Puede consultar el modelo normalmente
Se recomienda el enfoque no determinista a menos que necesite consultar los datos.
NOTA: En el modo no determinista, Active Record utiliza AES-GCM con una clave de 256 bits y un vector de inicialización aleatorio. En el modo determinista, también utiliza AES-GCM, pero el vector de inicialización se genera como un resumen HMAC-SHA-256 de la clave y el contenido a encriptar.
NOTA: Puede desactivar la encriptación determinista omitiendo una deterministic_key
.
3 Características
3.1 Action Text
Puede encriptar los 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 encriptación individuales a los atributos de Action Text. Utilizará encriptación no determinista con las opciones de encriptación global configuradas.
3.2 Fixtures
Puede obtener las fixtures de Rails encriptadas automáticamente agregando esta opción a su test.rb
:
config.active_record.encryption.encrypt_fixtures = true
Cuando está habilitado, todos los atributos encriptables se encriptarán según la configuración de encriptación definida en el modelo.
3.2.1 Fixtures de Action Text
Para encriptar las fixtures de Action Text, debe colocarlas en fixtures/action_text/encrypted_rich_texts.yml
.
3.3 Tipos admitidos
active_record.encryption
serializará los valores utilizando el tipo subyacente antes de encriptarlos, pero 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 utilizar un atributo serializado. La declaración del atributo serializado debe ir antes de la declaración de encriptación:
# 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
Es posible que necesite ignorar las mayúsculas y minúsculas al consultar datos encriptados de manera determinista. Hay dos enfoques que facilitan esto:
Puede utilizar la opción :downcase
al declarar el atributo encriptado para convertir el contenido a minúsculas antes de que ocurra la encriptación.
class Person
encrypts :email_address, deterministic: true, downcase: true
end
Al utilizar :downcase
, se pierde la mayúscula original. En algunas situaciones, es posible que desee ignorar la mayúscula y minúscula solo al realizar consultas y también almacenar la mayúscula original. Para esas situaciones, puede utilizar la opción :ignore_case
. Esto requiere agregar una nueva columna llamada original_<nombre_de_columna>
para almacenar el contenido con la mayúscula sin cambios:
class Label
encrypts :name, deterministic: true, ignore_case: true # el contenido con la mayúscula original se almacenará en la columna `original_name`
end
3.5 Soporte para datos no encriptados
Para facilitar las migraciones de datos no encriptados, la biblioteca incluye la opción config.active_record.encryption.support_unencrypted_data
. Cuando se establece en true
:
- Intentar leer atributos encriptados que no están encriptados funcionará normalmente, sin generar ningún error.
- Las consultas con atributos encriptados de manera determinista incluirán la versión "texto sin formato" de ellos para admitir la búsqueda de contenido encriptado y no encriptado. Debe establecer
config.active_record.encryption.extend_queries = true
para habilitar esto.
Esta opción está destinada a ser utilizada durante períodos de transición cuando los datos claros y los datos encriptados deben coexistir. Ambos se establecen en false
de forma predeterminada, lo cual es el objetivo recomendado para cualquier aplicación: se generarán errores al trabajar con datos no encriptados.
3.6 Soporte para esquemas de encriptación anteriores
Cambiar las propiedades de encriptación de los atributos puede romper los datos existentes. Por ejemplo, imagine que desea hacer que un atributo determinista sea no determinista. Si simplemente cambia la declaración en el modelo, la lectura de los textos cifrados existentes fallará porque el método de encriptación es diferente ahora. Para respaldar estas situaciones, puedes declarar esquemas de cifrado anteriores que se utilizarán en dos escenarios:
- Al leer datos cifrados, Active Record Encryption 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. Debes configurar
config.active_record.encryption.extend_queries = true
para habilitar esto.
Puedes configurar esquemas de cifrado anteriores:
- Globalmente
- En una base de atributos por atributo
3.6.1 Esquemas de cifrado anteriores globales
Puedes agregar esquemas de cifrado anteriores agregándolos como una lista de propiedades utilizando la propiedad de configuración previous
en tu archivo application.rb
:
config.active_record.encryption.previous = [ { key_provider: MyOldKeyProvider.new } ]
3.6.2 Esquemas de cifrado por atributo
Usa :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 nuevo (actual).
- Con cifrado determinista, la nueva información siempre se cifrará con el esquema de cifrado más antiguo de forma predeterminada.
Normalmente, con el cifrado determinista, quieres que los textos cifrados permanezcan constantes. Puedes cambiar este comportamiento configurando deterministic: { fixed: false }
. En ese caso, se utilizará el esquema de cifrado más nuevo para cifrar nuevos datos.
3.7 Restricciones únicas
NOTA: Las restricciones únicas solo se pueden utilizar con datos cifrados de forma determinista.
3.7.1 Validaciones únicas
Las validaciones únicas se admiten 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 cuando se combinen datos cifrados y no cifrados, y cuando se configuren esquemas de cifrado anteriores.
NOTA: Si quieres ignorar mayúsculas y minúsculas, asegúrate de usar downcase:
o ignore_case:
en la declaración de 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 forma determinista, debes asegurarte de que su texto cifrado nunca cambie.
Para fomentar esto, los atributos deterministas siempre utilizarán el esquema de cifrado más antiguo disponible de forma predeterminada cuando se configuren múltiples esquemas de cifrado. De lo contrario, es tu responsabilidad asegurarte 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 con nombres de columnas cifradas
De forma predeterminada, las columnas cifradas están configuradas para ser filtradas automáticamente en los registros de Rails. Puedes deshabilitar este comportamiento agregando lo siguiente a tu archivo application.rb
:
Al generar el parámetro de filtro, utilizará el nombre del modelo como prefijo. Por ejemplo: para Person#name
, el parámetro de filtro será person.name
.
config.active_record.encryption.add_to_filter_parameters = false
En caso de que desees excluir columnas específicas de este filtrado automático, agrégalas a config.active_record.encryption.excluded_from_filter_parameters
.
3.9 Codificación
La biblioteca conservará la codificación de los valores de cadena cifrados de forma no determinista.
Debido a que la codificación se almacena junto con la carga útil cifrada, los valores cifrados de forma determinista forzarán la codificación UTF-8 de forma predeterminada. Por lo tanto, el mismo valor con una codificación diferente dará como resultado un texto cifrado diferente cuando se cifre. Por lo general, quieres evitar esto para que las consultas y las restricciones de unicidad funcionen, por lo que la biblioteca realizará la conversión automáticamente en tu nombre.
Puedes configurar la codificación predeterminada deseada para el cifrado determinista con:
config.active_record.encryption.forced_encoding_for_deterministic_encryption = Encoding::US_ASCII
Y puedes deshabilitar este comportamiento y conservar 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. Puedes configurar proveedores de claves globalmente 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(["some passwords", "to derive keys from. ", "These should be in", "credentials"])
NOTA: De forma predeterminada, 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 envelope encryption:
- Genera una clave aleatoria para cada operación de cifrado de datos
- Almacena la clave de datos junto con los datos mismos, cifrada con una clave principal definida en la credencial
active_record.encryption.primary_key
.
Puedes configurar Active Record para usar este proveedor de claves agregando esto a tu archivo application.rb
:
config.active_record.encryption.key_provider = ActiveRecord::Encryption::EnvelopeEncryptionKeyProvider.new
Al igual que con otros proveedores de claves integrados, puedes proporcionar una lista de claves principales 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 utilizar 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 para cada 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 específica para una clase con la opción :key
:
class Article < ApplicationRecord
encrypts :summary, key: "una 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.
- Se probarán todas las claves 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 contenido nuevo
key_derivation_salt: a3226b97b3b2f8372d1fc6d497a0c0d3
Esto permite flujos de trabajo en los que se mantiene una lista corta de claves mediante la adición de nuevas claves, el cifrado de contenido y la eliminación de claves antiguas.
NOTA: Actualmente no se admite la rotación de claves para el cifrado determinista.
NOTA: Active Record Encryption aún no proporciona la gestión automática de los procesos de rotación de claves. Todas las piezas están ahí, pero aún no se ha implementado.
4.6 Almacenamiento de referencias de claves
Puede configurar active_record.encryption.store_key_references
para que active_record.encryption
almacene una referencia a la clave de cifrado en el propio mensaje cifrado.
config.active_record.encryption.store_key_references = true
Al hacerlo, se logra un descifrado más eficiente porque el sistema ahora puede localizar las 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
La encriptación de ActiveRecord está diseñada para ser utilizada de forma declarativa, pero ofrece una API para escenarios de uso avanzados.
5.1.1 Cifrar y descifrar
article.encrypt # cifra o vuelve a cifrar 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(title)
6.1 Opciones de configuración
Puede configurar las opciones de Active Record Encryption en su archivo application.rb
(escenario más común) o en un archivo de configuración específico del entorno config/environments/<nombre de entorno>.rb
si desea configurarlas según el entorno.
ADVERTENCIA: Se recomienda utilizar el soporte de credenciales incorporado de Rails para almacenar claves. Si prefiere configurarlas manualmente a través de propiedades de configuración, asegúrese de no incluirlas en su código (por ejemplo, utilice 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, se generará un error. Valor predeterminado: false
.
6.1.2 config.active_record.encryption.extend_queries
Cuando es verdadero, las consultas que hacen referencia a atributos cifrados de forma determinista se modificarán para incluir valores adicionales si es necesario. Esos valores adicionales serán la versión sin cifrar del valor (cuando config.active_record.encryption.support_unencrypted_data
es verdadero) y valores cifrados con esquemas de cifrado anteriores, si los hay (como se proporciona con la opción previous:
). Valor 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. Valor 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. Valor 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. Valor 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. Valor predeterminado: []
.
6.1.7 config.active_record.encryption.validate_column_size
Agrega una validación basada en el tamaño de la columna. Se recomienda para evitar almacenar valores enormes utilizando cargas útiles altamente compresibles. Valor predeterminado: true
.
6.1.8 config.active_record.encryption.primary_key
La clave o lista de claves utilizadas para derivar claves de cifrado de datos raíz. La forma en que se utilizan depende del proveedor de claves configurado. Se prefiere 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 determinístico. Se recomienda 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. Se recomienda 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 los atributos cifrados de manera determinística. Puede desactivar la codificación forzada estableciendo esta opción en nil
. Por defecto es Encoding::UTF_8
.
6.1.12 config.active_record.encryption.hash_digest_class
El algoritmo de resumen utilizado para derivar claves. Por defecto es OpenSSL::Digest::SHA1
.
6.1.13 config.active_record.encryption.support_sha1_for_non_deterministic_encryption
Permite descifrar datos cifrados de manera no determinística con una clase de resumen SHA1. Por defecto 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. Existe un contexto de cifrado predeterminado basado en su configuración global, pero puede configurar un contexto personalizado para un atributo específico o al ejecutar un bloque de código específico.
NOTA: Los contextos de cifrado son un mecanismo de configuración flexible pero avanzado. La mayoría de los usuarios no deberían tener que preocuparse por ellos.
Los principales componentes 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í se realiza mediante elcipher
y la serialización mediantemessage_serializer
.cipher
: el algoritmo de cifrado en sí (AES 256 GCM)key_provider
: proporciona claves de cifrado y descifrado.message_serializer
: serializa y deserializa las cargas cifradas (Message
).
NOTA: Si decide construir su propio message_serializer
, es importante utilizar 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 se realice el cifrado y realizar ataques de ejecución de código remoto (RCE). Esto significa que los serializadores personalizados deben evitar Marshal
, YAML.load
(usar YAML.safe_load
en su lugar) o JSON.load
(usar 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 archivo 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 utilizar ActiveRecord::Encryption.with_encryption_context
para establecer un contexto de cifrado para un bloque de código específico:
ActiveRecord::Encryption.with_encryption_context(encryptor: ActiveRecord::Encryption::NullEncryptor.new) do
...
end
6.2.4 Contextos de cifrado integrados
6.2.4.1 Desactivar el cifrado
Puede ejecutar código sin cifrado:
ActiveRecord::Encryption.without_encryption do
...
end
Esto significa que al leer texto cifrado se 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 el contenido cifrado:
ActiveRecord::Encryption.protecting_encrypted_data do
...
end
Esto puede ser útil si desea proteger 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 encuentras algún error tipográfico o factual. Para empezar, puedes leer nuestra contribución a la documentación sección.
También puedes encontrar contenido incompleto o desactualizado. Por favor, añade cualquier documentación faltante para main. Asegúrate de revisar Edge Guides primero para verificar si los problemas ya están resueltos o no en la rama principal. Consulta las Directrices de las Guías de Ruby on Rails para el estilo y las convenciones.
Si por alguna razón encuentras algo que corregir pero no puedes solucionarlo tú mismo, por favor abre un problema.
Y por último, cualquier tipo de discusión sobre la documentación de Ruby on Rails es muy bienvenida en el Foro oficial de Ruby on Rails.