Control de permisos de contratos inteligentes en Rust: visibilidad de funciones y gestión de acceso privilegiado

Diario de desarrollo de contratos inteligentes en Rust (7) Control de acceso en la seguridad de contratos

Este artículo abordará el control de permisos en los contratos inteligentes de Rust desde dos perspectivas:

  1. Visibilidad de acceso/llamada a métodos (funciones) de contratos inteligentes
  2. Control de acceso a funciones privilegiadas / División de responsabilidades

1. Visibilidad de funciones (métodos) de contratos

Al escribir contratos inteligentes, se puede controlar los permisos de llamada de las funciones especificando la visibilidad de las funciones del contrato. Esto es muy importante para proteger las partes clave del contrato de accesos o manipulaciones accidentales.

Tomando como ejemplo el intercambio Bancor Network, el 18 de junio de 2020, ocurrió un incidente de seguridad debido a una configuración incorrecta de los permisos de acceso a funciones clave del contrato. Este contrato fue escrito en lenguaje Solidity, y la visibilidad de las funciones se divide en dos tipos: public/external y private/internal.

Bancor, al modificar una vulnerabilidad de seguridad, configuró por error algunas funciones clave de transferencia como públicas, lo que permitió a cualquier persona llamar a estas funciones desde fuera del contrato para realizar operaciones de transferencia, poniendo en grave riesgo los 590,000 dólares en activos de los usuarios.

En los contratos inteligentes de Rust, el control de la visibilidad de las funciones es igualmente importante. Las funciones del contrato decoradas con el macro #[near_bindgen] definido por NEAR SDK tienen los siguientes atributos de visibilidad:

  • pub fn: función pública, que forma parte de la interfaz del contrato y puede ser llamada desde fuera del contrato.
  • fn: La función sin pub especificado solo puede ser llamada internamente dentro del contrato.
  • pub(crate) fn: restringir la llamada dentro del alcance de crate.

Otra forma de establecer el método como interno es definirlo en un bloque de código impl Contract que no esté decorado con #[near_bindgen].

Para las funciones de callback, deben establecerse como propiedades públicas para poder ser llamadas a través de function call. Al mismo tiempo, es necesario asegurarse de que la función de callback solo pueda ser llamada por el contrato mismo, lo que se puede lograr utilizando el macro #[private].

2. Control de acceso a funciones privilegiadas( mecanismo de lista blanca)

Además de la visibilidad de la función, es necesario establecer un mecanismo completo de lista blanca de control de acceso desde una perspectiva semántica. Ciertas funciones privilegiadas (como la inicialización del contrato, habilitar/deshabilitar, transferencias unificadas, etc.) solo pueden ser llamadas por el propietario del contrato (owner).

Se pueden implementar Traits personalizados para controlar el acceso a funciones privilegiadas, verificando si el llamador de la transacción es el propietario del contrato:

óxido pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }

Basado en este principio, se puede establecer múltiples usuarios o múltiples listas blancas en la lista blanca mediante la personalización de traits más complejos, logrando un control de acceso por grupos más detallado.

3. Más métodos de control de acceso

Otros métodos de control de acceso en contratos inteligentes Rust incluyen:

  • Control del momento de la llamada al contrato
  • Mecanismo de llamada multig firmada de funciones de contrato
  • Gobernanza(DAO) de la implementación

Estos contenidos se detallarán en la serie de diarios de desarrollo de contratos inteligentes que seguirá.

NEAR-1.19%
Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • 4
  • Compartir
Comentar
0/400
not_your_keysvip
· hace4h
No logro entender del todo la vulnerabilidad de bancor desde aquella vez.
Ver originalesResponder0
SigmaBrainvip
· hace23h
De hecho, la lección del fracaso de Bancor es profundamente impactante.
Ver originalesResponder0
NewPumpamentalsvip
· hace23h
¿Por qué se sigue hablando de control de permisos, y no se aprende la lección de Bancor?
Ver originalesResponder0
ChainWallflowervip
· hace23h
¡Ya entendí este problema de permisos!
Ver originalesResponder0
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)