Acabei de escrever uma análise sobre reentrancy - um problema de segurança que muitos desenvolvedores ainda ignoram ao construir contratos inteligentes.



Simplificando, reentrancy é quando um contrato inteligente é chamado várias vezes antes de completar a primeira chamada. Imagine assim: ContractA está executando uma função, ele chama ContractB, e ContractB chama de volta ContractA enquanto ainda não terminou. Essa é uma vulnerabilidade que um atacante pode explorar.

Um exemplo concreto: EtherStore tem 10 Ether, ContractB já enviou 1 Ether para ele. Quando ContractB chama a função de retirada, ele verifica se o saldo é maior que 0, e se for, envia Ether de volta. Mas aqui está o perigo - a atualização do saldo para 0 acontece após o envio. Portanto, o atacante pode criar uma função fallback que, ao receber Ether, chama novamente a função de retirada. Esse loop continua até que o Ether acabe.

Vou listar três maneiras de prevenir reentrancy:

Primeiro é usar o modificador nonReentrant. Essa abordagem bloqueia o contrato enquanto a função está em execução, impedindo que seja reentrado. Simples, mas eficaz para uma única função.

Segundo é aplicar o padrão Checks-Effects-Interactions. Em vez de atualizar o saldo após o envio, atualize antes. Assim, mesmo que uma chamada recursiva aconteça, o saldo já estará zerado, e a verificação falhará.

Terceiro é criar um contrato separado chamado GlobalReentrancyGuard. Essa abordagem usa uma variável de estado comum para controlar a reentrância em múltiplos contratos ao mesmo tempo. Especialmente útil quando seu projeto envolve vários contratos interagindo. Em vez de verificar em cada contrato individualmente, você centraliza essa verificação.

O problema de reentrancy não é novo, mas continua sendo uma das vulnerabilidades mais comuns. Percebo que muitos desenvolvedores ainda não aplicam essas medidas de forma consistente. Se você trabalha com Solidity, certifique-se de entender bem esse problema e aplicar pelo menos uma das três estratégias no seu projeto. Segurança de contratos inteligentes não é opcional, é obrigatória.
Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
  • Recompensa
  • Comentar
  • Republicar
  • Partilhar
Comentar
Adicionar um comentário
Adicionar um comentário
Nenhum comentário
  • Fixar