Diario de desarrollo de contratos inteligentes en Rust (7) Seguridad de contratos: control de acceso
Este artículo presentará el control de permisos en los contratos inteligentes Rust desde dos perspectivas:
La visibilidad de los métodos del contrato
Control de acceso a las funciones privilegiadas
1. Visibilidad de funciones de contratos
En los contratos inteligentes de Rust, el control de la visibilidad de las funciones es muy importante. El SDK de NEAR define los siguientes atributos de visibilidad mediante el macro #[near_bindgen]:
pub fn: función pública, se puede llamar desde fuera del contrato
fn: función interna, solo se puede llamar dentro del contrato
pub(crate) fn: restringido para llamar dentro de crate
Además, se pueden definir métodos internos a través de bloques de impl Contract independientes:
Para la función de retorno, debe configurarse como pub y utilizar el macro #[private] para asegurarse de que solo puede ser llamado por el contrato mismo:
Además de la visibilidad de las funciones, también es necesario establecer un mecanismo de lista blanca de control de acceso. Se puede implementar mediante Trait personalizado:
Esto permite implementar un mecanismo básico de lista blanca y también se puede expandir para realizar controles de acceso más complejos, como múltiples usuarios y múltiples listas blancas.
La seguridad de los contratos debe considerarse desde múltiples aspectos, incluyendo el control del momento de la llamada, mecanismos de múltiples firmas, etc., que se detallarán en artículos posteriores.
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.
16 me gusta
Recompensa
16
9
Republicar
Compartir
Comentar
0/400
GasWaster
· 07-24 14:55
Ya estás investigando cosas profundas otra vez.
Ver originalesResponder0
rugdoc.eth
· 07-24 12:22
Esto es demasiado común, ¿no?
Ver originalesResponder0
GateUser-9ad11037
· 07-24 03:37
¿Deberíamos complementar el mecanismo de la lista negra?
Ver originalesResponder0
DefiPlaybook
· 07-23 10:17
Los datos integrales muestran que el control de visitas sigue siendo uno de los tres principales errores de contrato.
Ver originalesResponder0
SeeYouInFourYears
· 07-21 20:27
rust es así.
Ver originalesResponder0
OnchainDetective
· 07-21 20:27
El control de permisos es solo un formalismo, ya debería haberse revisado la puerta trasera.
Ver originalesResponder0
rekt_but_resilient
· 07-21 20:21
Este mecanismo de seguridad del contrato es agua.
Ver originalesResponder0
DarkPoolWatcher
· 07-21 20:13
Está bastante bien escrito, pero me quedé dormido al leerlo.
Seguridad de contratos inteligentes en Rust: Explicación detallada del control de acceso y gestión de permisos
Diario de desarrollo de contratos inteligentes en Rust (7) Seguridad de contratos: control de acceso
Este artículo presentará el control de permisos en los contratos inteligentes Rust desde dos perspectivas:
1. Visibilidad de funciones de contratos
En los contratos inteligentes de Rust, el control de la visibilidad de las funciones es muy importante. El SDK de NEAR define los siguientes atributos de visibilidad mediante el macro #[near_bindgen]:
Además, se pueden definir métodos internos a través de bloques de impl Contract independientes:
óxido #[near_bindgen] impl Contract { pub fn increment(&mut self) { self.internal_increment(); } }
impl Contrato { pub fn internal_increment(&mut self) { self.counter += 1; } }
Para la función de retorno, debe configurarse como pub y utilizar el macro #[private] para asegurarse de que solo puede ser llamado por el contrato mismo:
óxido #[near_bindgen] impl Contrato { #[private] pub fn resolve_transfer(&mut self) { // Lógica de callback } }
2. Control de acceso a funciones privilegiadas
Además de la visibilidad de las funciones, también es necesario establecer un mecanismo de lista blanca de control de acceso. Se puede implementar mediante Trait personalizado:
ó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); }
En la función de privilegios, la llamada a assert_owner() puede limitar la ejecución solo al propietario.
óxido impl Contract { pub fn privileged_function(&mut self) { self.assert_owner(); // Operaciones privilegiadas } }
Esto permite implementar un mecanismo básico de lista blanca y también se puede expandir para realizar controles de acceso más complejos, como múltiples usuarios y múltiples listas blancas.
La seguridad de los contratos debe considerarse desde múltiples aspectos, incluyendo el control del momento de la llamada, mecanismos de múltiples firmas, etc., que se detallarán en artículos posteriores.