paint-brush
Código Smell 282: Valores predeterminados incorrectos y cómo solucionarlospor@mcsee
679 lecturas
679 lecturas

Código Smell 282: Valores predeterminados incorrectos y cómo solucionarlos

por Maximiliano Contieri4m2024/12/02
Read on Terminal Reader

Demasiado Largo; Para Leer

Trate las respuestas desconocidas como no autorizadas, no como válidas.
featured image - Código Smell 282: Valores predeterminados incorrectos y cómo solucionarlos
Maximiliano Contieri HackerNoon profile picture

Los incumplimientos pueden hundirte

TL;DR: Trate las respuestas desconocidas como no autorizadas, no como válidas.

Problemas

  • Riesgos de seguridad
  • Ignorando casos desconocidos
  • Error de interpretación errónea
  • Establecimiento de estados válidos de forma predeterminada
  • Autorizaciones no coincidentes
  • No se pueden registrar eventos
  • Potencial de explotación

Soluciones

  1. Validar todas las respuestas frente a un conjunto cerrado de códigos conocidos.
  2. Predeterminado (y desconocido) a no autorizado o Eliminar valores predeterminados .
  3. Registre todos los casos no coincidentes o inesperados para su análisis.
  4. Prueba con escenarios de borde.
  5. Sincronice periódicamente los grupos de respuestas con los procesadores para evitar códigos obsoletos.
  6. Centrarse en la seguridad convirtiéndola en un proceso de cambio hacia la izquierda.
  7. Diseñar sistemas con resiliencia al cambio para manejar escenarios cambiantes.

Contexto

Hoy es el día de la seguridad informática y todo programador debe reconocer su responsabilidad.


Imagine una aplicación que gestiona ventas y que depende de grupos de respuestas de procesadores de tarjetas de crédito para gestionar las transacciones.


Cada procesador de tarjetas de crédito proporciona códigos de respuesta predefinidos para diversas situaciones, como saldo insuficiente o tarjetas vencidas.


El problema comienza cuando un procesador agrega un nuevo código de respuesta para transacciones denegadas pero no notifica a la plataforma.


La aplicación no reconoce el nuevo código, lo trata como "no encontrado" y autoriza la compra.


Los usuarios notan esta falla y la aprovechan para realizar compras no autorizadas.


Los ingresos de la plataforma se desploman, lo que la lleva a la quiebra.

Código de muestra

Equivocado

 String response = paymentProcessor.authorize(cardDetails); switch (response) { case "DECLINED_INSUFFICIENT_FUNDS": // Handle insufficient funds break; case "DECLINED_EXPIRED_CARD": // Handle expired card break; default: // Authorize purchase break; }

Bien

 String response = paymentProcessor.authorize(cardDetails); switch (response) { case "APPROVED": // Authorize purchase break; case "DECLINED_INSUFFICIENT_FUNDS": // Handle insufficient funds break; case "DECLINED_EXPIRED_CARD": // Handle expired card break; case "DECLINED_NEW_REASON": // Handle new declined reason break; default: // Reject purchase (default case for unknown responses) break; }

Detección

  • [x] Manual

Puedes detectar este olor revisando la lógica de manejo de errores.


Verifique si el sistema registra y rechaza los casos no reconocidos.


Las pruebas automatizadas pueden ayudar a identificar si las entradas nuevas o inesperadas se convierten en acciones válidas de forma predeterminada.


Las herramientas de análisis estático pueden ayudar al señalar un manejo de errores potencialmente incompleto.

Etiquetas

  • Seguridad

Nivel

  • [x] Intermedio

¿Por qué es importante la biyección?

Es fundamental mantener una correspondencia uno a uno entre la representación interna de las respuestas del procesador de pagos de su aplicación y los códigos reales devueltos por el procesador.


Cuando se rompe la Biyección , se crea un desajuste.


La aplicación interpreta incorrectamente códigos desconocidos, lo que genera un comportamiento inesperado, agujeros de seguridad y consecuencias comerciales potencialmente desastrosas.

Generación de IA

Las herramientas de IA pueden crear este olor si no se especifica cómo manejar los casos desconocidos.


Por ejemplo, el manejo de errores genéricos podría tener como predeterminados resultados benignos como "no encontrado" o "éxito".

Detección de IA

Los generadores de IA pueden solucionar este problema si les indica que traten los casos desconocidos como no autorizados y enfaticen el registro y la prueba de escenarios inesperados.

¡Pruébalos!

Recuerde: los asistentes de IA cometen muchos errores

Sin instrucciones adecuadas

Con instrucciones específicas

ChatGPT

ChatGPT

Claudio

Claudio

Perplejidad

Perplejidad

Copiloto

Copiloto

Géminis

Géminis

Conclusión

Maneje siempre los casos desconocidos con cautela.


Valores predeterminados como "no encontrado" pueden generar graves problemas de seguridad y pérdidas financieras.


Haga que el registro y la denegación de respuestas desconocidas formen parte de sus prácticas de desarrollo.


Tome decisiones de desplazamiento hacia la izquierda relacionadas con la seguridad mientras programa.

Relaciones

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxii

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-viii-8mn3352

Descargo de responsabilidad

Los olores del código son mi opinión .

Créditos

Foto de Nathana Rebouças en Unsplash

https://www.youtube.com/watch?v=J2QOejhA6ek


Las suposiciones son la madre de todos los fracasos.

Dijo Ouissal

Grandes citas sobre ingeniería de software


Este artículo es parte de la serie CodeSmell.

Cómo encontrar las partes apestosas de su código