Tremendo, no sabia que se podía acceder a variables privadas de esa forma. Muy útil la verdad.
Introducción
Importancia de la seguridad en el desarrollo de contratos
Buenas prácticas
Vulnerabilidades con variables globales
Identificación del usuario: problema con tx.origin
Dependencia con timestamp
Vulnerabilidades del almacenamiento
Overflow y underflow
Variables privadas
Problemas con llamadas externas
DelegateCall
Gas insuficiente en Solidity
Ataques con transferencias
Forzar envío de Ethers
Reentrancy simple
Reentrancy cruzado
Denegación de servicio
Denegación por reversión
Denegación por límite de gas
Despedida
Desafío
Continúa aprendiendo
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Sebastián Leonardo Perez
Los diferentes tipos de visibilidades que puedes declarar en un contrato inteligente pueden tener diversas vulnerabilidades. Estas no necesariamente pueden ser un problema, pero debes conocerlas para evitar ataques.
Solidity es un lenguaje de programación orientado a objetos y como tal, permite configurar la visibilidad de los atributos y métodos de todo el contrato. Podemos declarar atributos y funciones públicas, privadas, internas y externas.
De alguna forma u otra, todo en Blockchain es accesible. No existe posibilidad de bloquear por completo un dato y ocultarlo.
La visibilidad por defecto de una variable es internal
mientras que la visibilidad de las funciones es public
. Si declaras variables del tipo public
, al compilar el contrato inteligente se crearán métodos del tipo view
para obtener sus valores.
Si decidimos declarar variables privadas, tienes que saber que es posible el acceso a estos datos de todos modos.
contract Privado {
uint private secret_1; // Índice 0
uint private secret_2; // índice 1
constructor(valor_1: uint, valor_2: uint) {
secret_1 = valor_1;
secret_2 = valor_2;
}
}
Las variables privadas de un contrato pueden ser accedidas a través de su índice en memoria con ayuda de librerías como Truffle que permiten acceder a los datos privados de un contrato inteligente con métodos como web3.eth.getStorageAt("<contract_address>", index)
. El mismo devolverá el valor de la variable codificado en Base64, muy fácilmente decodificable para obtener su verdadero valor.
En síntesis, utiliza los diferentes tipos de visibilidad que Solidity tiene para ofrecer dependiendo la regla de negocio, pero sabiendo que todos los datos son visibles de alguna u otra manera. No guardes contraseñas o secretos en variables privadas, no han sido implementados para eso.
Contribución creada por: Kevin Fiorentino (Platzi Contributor).
Aportes 3
Preguntas 3
Tremendo, no sabia que se podía acceder a variables privadas de esa forma. Muy útil la verdad.
VARIABLES PRIVADAS
😮 Nada es realmente privado
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?