Avances en la seguridad de contratos inteligentes en Rust: prácticas de control de permisos y gestión de accesos

robot
Generación de resúmenes en curso

Diario de desarrollo de contratos inteligentes en Rust (7) Control de permisos de seguridad del contrato

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

  1. La visibilidad de los métodos del contrato.
  2. Control de acceso a las funciones privilegiadas

1. Visibilidad de las funciones de contratos

El control de visibilidad de las funciones del contrato es crucial para proteger las funciones clave. Tomando como ejemplo el incidente de seguridad de Bancor Network en junio de 2020, debido a que se configuró erróneamente una función de transferencia clave como pública, los activos de los usuarios se vieron en riesgo.

En los contratos inteligentes de Rust, hay las siguientes visibilidades de funciones:

  • pub fn: función pública, que se puede llamar desde el exterior
  • fn: función interna, solo se puede llamar dentro del contrato
  • pub(crate) fn: restringido a llamadas internas en crate

Además, definir una función en un bloque impl que no esté decorado con #[near_bindgen] también puede convertirla en una función interna.

Para las funciones de callback, deben ser públicas pero asegurarse de que solo pueden ser llamadas por el propio contrato. Se puede utilizar el macro #[private] para implementar esta función.

Es importante tener en cuenta que la visibilidad predeterminada en Rust es privada, a diferencia de la predeterminada pública en algunas versiones de Solidity. La excepción son los elementos en pub trait y pub enum que son públicos por defecto.

2. Control de acceso a funciones privilegiadas

Además de la visibilidad de las funciones, también se debe establecer un mecanismo de lista blanca para controlar el acceso a las funciones privilegiadas. Similar al modificador onlyOwner en Solidity, se puede implementar un rasgo Ownable:

ó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); }

El uso de este trait puede restringir que solo el owner pueda llamar a ciertas funciones privilegiadas. Basado en este principio, se puede establecer una lista blanca más compleja para lograr un control de acceso más detallado.

3. Otras metodologías de control de acceso

También se pueden considerar métodos de control de acceso adicionales, como el control del momento de la llamada al contrato, el mecanismo de llamada multi-firma y la gobernanza DAO; estos se describirán con más detalle en artículos posteriores.

Ver originales
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Recompensa
  • 7
  • Compartir
Comentar
0/400
LootboxPhobiavip
· hace11h
Se me ha quedado atascado, no puedo aprender contratos inteligentes.
Ver originalesResponder0
GasOptimizervip
· hace11h
La visualización del consumo de gas en multi-firma es otro gran tema.
Ver originalesResponder0
BridgeJumpervip
· hace11h
¿El código ya está seguro? De todos modos, fue inyectado.
Ver originalesResponder0
UncleLiquidationvip
· hace11h
La seguridad de la multi-firma está bien.
Ver originalesResponder0
UncleWhalevip
· hace11h
La seguridad debe tomarse en serio.
Ver originalesResponder0
BankruptcyArtistvip
· hace12h
¿Para qué sirve el multi-firma? Con vulnerabilidades, aún así se puede explotar.
Ver originalesResponder0
MEVSandwichvip
· hace12h
¡Buen trabajo! La multi-firma se ve segura~
Ver originalesResponder0
  • Anclado
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)