Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Usar opciones seguras en condicionales

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en Scala al utilizar opciones por defecto seguras. Las estructuras condicionales pueden generar vulnerabilidades en la aplicación si no son configuradas adecuadamente.

Necesidad

Establecer opciones seguras por defecto en estructuras condicionales.

Contexto

​A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se esta desarrollando una aplicación en lenguaje de programación Scala v2.10.4.

  2. La aplicación utiliza estructuras condicionales como if o match.

  3. No se ha definido escenarios por defecto ante condiciones no contempladas por la aplicación.

Solución

Las estructuras condicionales permiten la toma de decisiones dentro de una aplicación dadas las condiciones esperadas. Una buena práctica de programación consiste en definir opciones por defecto para tratar adecuadamente las entradas inesperadas, evitando así comportamientos no deseados en la aplicación.

En cada estructura condicional empleada en una aplicación Scala se recomienda contemplar todos los posibles escenarios. Para ello debemos seguir los siguientes criterios:

  • Para sentencias if debe usarse su correspondiente else [1].

  • Para sentencias match debe usarse su correspondiente _ [2].

En este artículo mostraremos a través de un ejemplo cómo definir opciones seguras por defecto en Scala. Mostrando la forma de utilizar las opciones por defecto else y _. Para ello seguiremos el siguiente procedimiento:

  1. Se empieza validando que exista por lo menos un argumento al llamar al programa. Posteriormente se almacena el argumento convertido a entero.

    validation.scala
    1
    2
    3
    4
    5
    object Main {
      def main(args: Array[String]) {
        if (args.length>=1){
          var entrada=args(0).toInt
    ...
    
  2. Una vez verificado que la cantidad de argumentos sea la correcta, se evalúa las instrucciones que se van a ejecutar de acuerdo al valor de la variable entrada. En este caso únicamente mostraremos un mensaje con la opción seleccionada por el usuario, como se muestra a continuación:

    1
    2
    3
    4
      entrada match {
        case 1 => println("Primera opción seleccionada")
        case 2 => println("Segunda opción seleccionada")
    ...
    
  3. Se crea la opción segura por defecto para el match, _. Con esto la aplicación muestra un mensaje de error cuando el argumento suministrado por el usuario no coincide con ninguna opción válida.

    1
    2
        case _ => println("No se ha seleccionado una opción valida")
    ...
    
  4. Se crea la opción segura por defecto para el if, else. De esta forma se muestra un mensaje de error cuando la aplicación no recibe el número adecuado de argumentos.

    1
    2
    3
    4
    5
    6
    7
          }
        }else{
          println("Debe ingresarse como argumento el número de la opción: 1 o 2")
        }
      }
    }
    ...
    
  5. Se compila y ejecuta la aplicación con algunos casos de prueba. De esta manera verificamos que las respuestas sean las esperadas.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    % scala Main.scala
    Debe ingresarse como argumento el número de la opción: 1 o 2
    % scala Main.scala 1
    Primera opción seleccionada
    % scala Main.scala 2
    Segunda opción seleccionada
    % scala Main.scala -1
    No se ha seleccionado una opción valida
    % scala Main.scala 1000000
    No se ha seleccionado una opción valida
    

Se evidencia que la aplicación se comporta bien al no ingresar argumento o ingresar opciones por fuera de las definidas. Con esto se garantiza su estabilidad frente a condiciones inesperadas.




Haz un comentario

Estado de los servicios - Términos de Uso