Prevenção de estouro de inteiros: a chave para garantir a segurança dos contratos inteligentes

Vulnerabilidade de overflow de inteiro e sua proteção

A sobrecarga de inteiros é uma vulnerabilidade comum de programação que pode ocorrer na maioria das linguagens de programação. A sobrecarga acontece quando o resultado de um cálculo ultrapassa o intervalo de representação do tipo inteiro. Por exemplo, o intervalo do inteiro sem sinal de 32 bits (uint32) é de 0 a 4.294.967.295. Se adicionarmos 1 a 4.294.967.295, o resultado "transbordará" e se tornará 0.

Esta sobrecarga pode causar sérios erros de programa, especialmente ao lidar com dados financeiros. Por exemplo, se o preço das ações for representado por um inteiro de 32 bits, quando o preço exceder o valor máximo, pode ser erroneamente lido como 0, o que claramente causaria uma enorme confusão.

A sobrecarga de inteiros divide-se em dois casos: sobrecarga superior e sobrecarga inferior.

  • Overflow: o resultado excede o valor máximo, como uint32 de 0xFFFFFFFF + 1 = 0x00000000
  • Underflow: o resultado é menor que o valor mínimo, como uint32 de 0x00000000 - 1 = 0xFFFFFFFF

Em contratos inteligentes de blockchain, a vulnerabilidade de estouro de inteiros é especialmente perigosa. Em 2018, o token BEC da BeautyChain foi explorado por atacantes devido a uma vulnerabilidade de estouro de inteiros, resultando no roubo de uma grande quantidade de tokens.

Para evitar a sobrecarga de inteiros, a linguagem Rust oferece alguns métodos eficazes:

  1. Ativar verificação de estouro no modo de lançamento:

toml [profile.release] overflow-checks = true panic = 'abort'

  1. Use o crate uint para suportar tipos de inteiros maiores, como U256, U512, etc.

  2. Use funções de conversão de tipo para detectar overflow, como:

ferrugem let amount_u256 = U256::from(u128::MAX) + 1; let amount_u128 = amount_u256.as_u128(); // irá disparar panic

  1. Usar funções Safe Math como checked_add, checked_sub, etc:

ferrugem let result = x.checked_sub(y).expect("Underflow ocorreu");

Através desses métodos, podemos detectar e prevenir efetivamente o overflow de inteiros, aumentando a segurança dos contratos inteligentes. Ao escrever contratos que envolvem cálculos com grandes valores, é essencial tratar com cautela as possíveis situações de overflow.

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
  • 4
  • Partilhar
Comentar
0/400
SellLowExpertvip
· 07-16 05:14
Não será que alguém foi apanhado numa avalanche novamente?
Ver originalResponder0
SigmaBrainvip
· 07-16 05:14
Escrever código sem estouro é impossível, quem entende, entende.
Ver originalResponder0
SchroedingersFrontrunvip
· 07-16 05:11
Vocês estão dizendo que essa coisa não é apenas cair para zero os ativos na Carteira?
Ver originalResponder0
AirdropHunterWangvip
· 07-16 04:45
Caí em mais uma armadilha. Quem entende isso?
Ver originalResponder0
  • Pino
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)