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:
La visibilidad de los métodos del contrato.
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:
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
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.
10 me gusta
Recompensa
10
10
Republicar
Compartir
Comentar
0/400
Anon32942
· 07-14 23:24
Este código es un poco difícil de masticar.
Ver originalesResponder0
GasFeeCrier
· 07-14 20:16
¿Qué tan seguro es realmente esta seguridad?
Ver originalesResponder0
MeaninglessApe
· 07-14 14:35
¿También hay que hacer esto? Ya se escribió en Rust.
Ver originalesResponder0
LootboxPhobia
· 07-12 09:38
Se me ha quedado atascado, no puedo aprender contratos inteligentes.
Ver originalesResponder0
GasOptimizer
· 07-12 09:38
La visualización del consumo de gas en multi-firma es otro gran tema.
Ver originalesResponder0
BridgeJumper
· 07-12 09:37
¿El código ya está seguro? De todos modos, fue inyectado.
Ver originalesResponder0
UncleLiquidation
· 07-12 09:37
La seguridad de la multi-firma está bien.
Ver originalesResponder0
UncleWhale
· 07-12 09:30
La seguridad debe tomarse en serio.
Ver originalesResponder0
BankruptcyArtist
· 07-12 09:22
¿Para qué sirve el multi-firma? Con vulnerabilidades, aún así se puede explotar.
Avances en la seguridad de contratos inteligentes en Rust: prácticas de control de permisos y gestión de accesos
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. 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:
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.