Diário de Desenvolvimento de Contratos Inteligentes em Rust (7) Segurança de Contratos: Controle de Permissões
Este artigo abordará o controle de permissões em contratos inteligentes Rust sob duas perspetivas:
Visibilidade dos métodos de contrato
Controle de acesso à função privilegiada
1. Visibilidade das funções de contrato
O controle de visibilidade das funções de contrato é crucial para proteger funcionalidades-chave. Tomando como exemplo o incidente de segurança da Bancor Network em junho de 2020, a exposição acidental de uma função de transferência crítica como public colocou os ativos dos usuários em risco.
Em contratos inteligentes Rust, a visibilidade das funções pode ser das seguintes formas:
pub fn: função pública, pode ser chamada externamente
fn: função interna, só pode ser chamada dentro do contrato
pub(crate) fn: restringir a chamada dentro do crate
Além disso, definir a função em um bloco impl que não é modificado por #[near_bindgen] também pode torná-la uma função interna.
Para a função de callback, deve ser definida como pública, mas ao mesmo tempo garantir que só pode ser chamada pelo próprio contrato. Pode usar o macro #[private] para implementar esta funcionalidade.
É importante notar que a visibilidade padrão em Rust é privada, ao contrário de algumas versões do Solidity, onde é pública por padrão. A exceção são os itens em pub trait e pub enum, que são públicos por padrão.
2. Controle de acesso das funções privilegiadas
Além da visibilidade da função, é necessário estabelecer um mecanismo de lista branca para controlar o acesso a funções privilegiadas. Semelhante ao modificador onlyOwner no Solidity, pode-se implementar um traço Ownable:
Usar esse trait pode limitar que apenas o owner possa chamar certas funções privilegiadas. Com base nesse princípio, é possível configurar uma lista de permissões mais complexa para implementar um controle de acesso mais refinado.
3. Outros métodos de controlo de acesso
Pode-se considerar métodos adicionais de controle de acesso, como controle de momento da chamada do contrato, mecanismo de chamada multi-assinatura, governança DAO, entre outros. Estes serão detalhados em artigos posteriores.
Ver original
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 Curtidas
Recompensa
7
7
Compartilhar
Comentário
0/400
LootboxPhobia
· 5h atrás
Fiquei preso, não consigo aprender contratos inteligentes.
Ver originalResponder0
GasOptimizer
· 5h atrás
A visualização do consumo de gás em multi-assinatura é mais um grande tema.
Ver originalResponder0
BridgeJumper
· 5h atrás
O código está seguro, certo? Continua a ser injetado.
Ver originalResponder0
UncleLiquidation
· 5h atrás
A segurança da multi-assinatura é razoável.
Ver originalResponder0
UncleWhale
· 5h atrás
A segurança deve ser levada a sério.
Ver originalResponder0
BankruptcyArtist
· 5h atrás
Qual é a utilidade do multi-assinatura? Se há vulnerabilidades, ainda pode ser explorado.
Rust contratos inteligentes segurança avançada: prática de controle de permissões e gestão de acessos
Diário de Desenvolvimento de Contratos Inteligentes em Rust (7) Segurança de Contratos: Controle de Permissões
Este artigo abordará o controle de permissões em contratos inteligentes Rust sob duas perspetivas:
1. Visibilidade das funções de contrato
O controle de visibilidade das funções de contrato é crucial para proteger funcionalidades-chave. Tomando como exemplo o incidente de segurança da Bancor Network em junho de 2020, a exposição acidental de uma função de transferência crítica como public colocou os ativos dos usuários em risco.
Em contratos inteligentes Rust, a visibilidade das funções pode ser das seguintes formas:
Além disso, definir a função em um bloco impl que não é modificado por #[near_bindgen] também pode torná-la uma função interna.
Para a função de callback, deve ser definida como pública, mas ao mesmo tempo garantir que só pode ser chamada pelo próprio contrato. Pode usar o macro #[private] para implementar esta funcionalidade.
É importante notar que a visibilidade padrão em Rust é privada, ao contrário de algumas versões do Solidity, onde é pública por padrão. A exceção são os itens em pub trait e pub enum, que são públicos por padrão.
2. Controle de acesso das funções privilegiadas
Além da visibilidade da função, é necessário estabelecer um mecanismo de lista branca para controlar o acesso a funções privilegiadas. Semelhante ao modificador onlyOwner no Solidity, pode-se implementar um traço Ownable:
ferrugem pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }
Usar esse trait pode limitar que apenas o owner possa chamar certas funções privilegiadas. Com base nesse princípio, é possível configurar uma lista de permissões mais complexa para implementar um controle de acesso mais refinado.
3. Outros métodos de controlo de acesso
Pode-se considerar métodos adicionais de controle de acesso, como controle de momento da chamada do contrato, mecanismo de chamada multi-assinatura, governança DAO, entre outros. Estes serão detalhados em artigos posteriores.