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
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.
7 me gusta
Recompensa
7
7
Compartir
Comentar
0/400
LootboxPhobia
· hace11h
Se me ha quedado atascado, no puedo aprender contratos inteligentes.
Ver originalesResponder0
GasOptimizer
· hace11h
La visualización del consumo de gas en multi-firma es otro gran tema.
Ver originalesResponder0
BridgeJumper
· hace11h
¿El código ya está seguro? De todos modos, fue inyectado.
Ver originalesResponder0
UncleLiquidation
· hace11h
La seguridad de la multi-firma está bien.
Ver originalesResponder0
UncleWhale
· hace11h
La seguridad debe tomarse en serio.
Ver originalesResponder0
BankruptcyArtist
· hace12h
¿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.