Buenas prácticas

2/15
Recursos

Hay algunas medidas que puedes aplicar para evitar problemas de seguridad en los contratos y no exponer vulnerabilidades al desarrollarlos

Qué medidas tomar al desarrollar contratos inteligentes

Comencemos viendo una serie de puntos a tener en cuenta para convertirnos en los mejores desarrolladores Web3.

1. Controlar el uso del gas

Una correcta utilización del gas hace que nuestro contrato sea aprovechado al máximo, que sea muy eficiente y reduzcamos costos a nivel financiero, evitando usos incorrectos.

Si exponemos una llamada externa en nuestros contratos, evitamos que puedan hacer excesivas operaciones con el control correcto del gas. Así que siempre en una llamada externa, hay que configurar un límite de gas para que el contrato o el código que se vaya a utilizar luego de esta llamada no aproveche esta utilización del gas para una acción malintencionada.

2. Uso de librerías

No debemos reinventar la rueda. En otras palabras, al comenzar el desarrollo de un contrato podemos resolver determinadas operaciones recurrentes con ayuda de contratos ya desarrollados y auditados. Es una gran medida de seguridad que ofrece garantías y ganamos tiempo en el desarrollo.

Muchas de estas librerías como las de OpenZeppelin están desarrolladas por verdaderos expertos.

3. Control de acceso

El control de acceso va a limitar que un usuario que no tenga permisos, pueda ejecutar funciones en nuestros contratos.

Podemos prevenir, por ejemplo, que de repente un usuario emita tokens sin ser administrador/owner. Por lo tanto, tomar estas medidas y controlar el correcto uso del contrato a nivel de roles y permisos es una gran medida de seguridad para prevenir que estos usuarios accedan y ejecuten acciones que no queremos que hagan.

4. Bloquear un contrato

Imaginemos que ocurre algún problema o detectamos alguna falla o comportamiento indebido en el uso del contrato. Automáticamente, podemos bloquearlo y dejarlo en pausa para tomar alguna medida al respecto.

Una buena práctica que puedes hacer es la actualización de la versión del contrato, si el protocolo lo permite, arreglar el error dentro de las posibilidades o simplemente evitar que una falla o vulnerabilidad siga siendo atacada.

Control = Centralización: ¿buena práctica?

Si aplicamos gestión de permisos, de roles o simplemente bloqueamos el contrato, podemos atentar contra la descentralización del mismo. Debemos ser muy cuidadosos con que nuestro proyecto no se convierta en algo centralizado, si no deseamos que así sea, lo mejor para los escenarios descentralizados es justamente que la misma red o participantes gestionen que todo funcione de forma correcta, pero en algunos casos el control de acceso nos puede ser útil.

Que un contrato sea centralizado no tiene nada de malo. Si bien la filosofía Blockchain tiene como concepto principal la descentralización, nuestro negocio puede tener puntos centralizados si tenemos un buen motivo y nuestros usuarios están de acuerdo.

¿Por qué conocer los fundamentos de Blockchain?

Un tema fundamental a la hora de interactuar con los distintos contratos en la red son las transferencias y las funciones que reciben transferencias de parte de los contratos.

Estos son conceptos que tenemos que entender bien en profundidad, pues muchos de los ataques se dan por no conocer a fondo el funcionamiento, por no saber cómo se realizan estas transacciones correctamente o cómo se realizan a nivel de seguridad.

Entendiendo muy bien el flujo de transferencias y de recepción de ETH en la red, evita que nuestros contratos tengan puntos de ataque que pueden ser explotados. Ten en cuenta que entendiendo bien cada concepto del funcionamiento de Ethereum o de cualquier Blockchain podemos prevenir posibles ataques.

Conclusión

Desarrollar contratos inteligentes es muy exigente y estricto. Ethereum ofrece una gran guía para desarrolladores que te será de utilidad leerla como a tu libro favorito.


Contribución creada por Kevin Fiorentino (Platzi Contributor) con aportes de López Agustín.

Aportes 4

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Controlar el uso de gas, es controlar el uso de nuestros contratos:

Una correcta utilizacion del gas hace que los metodos funciones y el uso de nuestro contrato sea aprovechado al maximo, que sea muy eficiente y tambien vamos a reducir costos a nivel financiero, sobre todo evitar posibles usos incorrectos del gas, por ejemplo si nosotros exponemos una llamada externa en nuestros contratos, vamos a evitar que puedan hacer excesivas operaciones con el control correcto del gas, por lo tanto siempre que se pueda en una llamada externa hay que poner un limite de gas, un tope, para que justamente el contrato o el codigo que se vaya a utilizar luego de la llamada externa no aproveche esta utilizacion del gas para hacer algo malintencionado.

Tambien tenemos a mano las librerias, lo bueno de las librerias es que no tenemos que reinventar la rueda, es decir, cuando vamos a escribir un codigo, para resolver determinada operacion, no tenemos que reeplantearnos y volver a escribir todo el desarrollo, sino que podemos aprovechar estos contratos que ya estan escritos, y estan auditados, entonces es una gran medida de seguridad para poder utilizar y sobre todo ganar tiempo a nivel de desarrollo, no olvidemos que muchas de estas librerias que estan publicadas hoy, estan hechas por desarrolladores que son expertos.

Control de accesso:

El control de Acceso va a limitar que un usuario que no tenga permisos pueda ejecutar funciones en nuestros contratos, sobre todo esto va a prevenir que de repente en un token pueda venir un usuario y pueda emitir monedas sin ser administrador/owner por lo tanto, tomar estas medidas y controlar el correcto uso del contrato a nivel de roles y permisos es una gran medida de seguridad para prevenir que estos usuarios accedan y ejecuten acciones que no queremos en nuestros contratos

Bloquear el contrato:

Imaginemos que ocurre algun problema o detectamos alguna falla o comportamiento indebido en el uso del contrato, automaticamente podemos bloquear el contrato, podemos dejar en pausa y podemos tomar alguna medida al respecto: ej, tratar de actualizar una version distinta al contrato para no perder la informacion y tambien arreglar el error o simplemente evitar que una falla o vulnerabilidad siga siendo atacada, entonces podemos poner en pausa nuestro contrato

Tenemo sque tener en cuenta:

Si aplicamos gestion de permisos, de roles, o simplemente bloqueamos el contrato, vamos a estar atentando contra la descentralizacion del mismo, entonces aca tenemos que ser muy cuidadosos en que nuestro proyecto, nuestro contrato no se convierta en algo decentralizado si no deseamos que asi sea, lo mejor para los escenarios descentralizados es justamente que la misma red, o participantes gestionen que todo funcione de forma correcta, pero en algunos casos el control de acceso nos va a servir de gran manera

Transferencias y Hook:

Un tema fundamental a la hora de interactuar con los distintos contratos en la red son las transferencias y las funciones que reciben transferencias de parte de los contratos, por lo tanto son conceptos que tenemos que entender bien en profundidad, muchos de los ataques vienen por el lado de no conocer a fondo por no saber como se realzian estas transacciones o como se realizan a nivel de seguridad, por ej establecer un limite de gas, entonces entendiendo muy bien el flujo de transferencias y de recepcion de ethers en la red, evita que nuestros contratos tengan muchisimos factores de ataques de los que estan siendo explotados y que nosotros podamos prevenir entendiendo bien conceptos

  • Controlar el uso del gas: Nos ayuda a:

    • Mejorar el performance
    • Reducir costos
    • Evitar la ejecucion de codigo con malas intenciones.
  • Utilizacion de librerias: No reinventamos la reuda, Nos ofrecen soluciones a desafios que podemos econtrar con nuestros proyectos.

    • Son soluciones avaladas: Ya han sudo probadas y auditados. lo cual es confiable para utilizar
  • Control de acceso: Prevenir que un usuario sin permisos ejecute codigo en nuestro contrato

    • Prevenir es mejor que lamentar
  • Bloquear un contrato: En caso de detectar un ataque y tomar medidas para salvarlo.

  • Transferencias y Hooks: Conocer a fondo el duncionamiento de cómo enviar Ether desde un contrato y cómo un contraro recibe transferencias es clave para prevenir vulnerabilidades

Nota: Ejercer el control de un contrato puede convertir nuestro proyecto en un escenario centralizado.

Controlar el uso del gas
Una buena gestión del gas ayuda a:

  • Mejorar la perfomance.
  • Reducir costos.
  • Ejecutar codigo con malas intenciones.
uy no