Los incumplimientos pueden hundirte
TL;DR: Trate las respuestas desconocidas como no autorizadas, no como válidas.
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.
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; }
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; }
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.
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.
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".
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.
Recuerde: los asistentes de IA cometen muchos errores
Sin instrucciones adecuadas | Con instrucciones específicas |
---|---|
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.
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
Los olores del código son mi opinión .
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.