Joven hacker sonriendo

Definir opciones seguras en condicionales

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en C Sharp al definir opciones seguras en estructuras condicionales. Esto mejora la seguridad de la aplicación al contemplar todos los escenarios posibles, en un ambiente controlado.

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 está desarrollando una aplicación en C Sharp.

  2. La aplicación utiliza estructuras condicionales, tales como if o switch.

Solución

Cuando se desarrollan aplicaciones, es muy importante pensar en la seguridad general de las mismas. Para ello existen muchos criterios de programación segura que se pueden aplicar para evitar ataques malintencionados. La validación de entradas es uno de ellos, y constituye un proceso esencial para crear aplicaciones seguras, pues es gracias a ella que es posible proteger el sistema contra ataques comunes de inyección de código y similares. La definición de opciones por defecto en las estructuras condicionales hace parte de la validación de entradas, debido a que permite abarcar todos los posibles escenarios, terminando la aplicación en un escenario seguro y controlado ante una entrada inválida.

En cada estructura condicional empleada en una aplicación en lenguaje C Sharp, se recomienda definir opciones seguras por defecto. Para lograr esto, se deben seguir los siguientes criterios:

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

  • Para sentencias switch debe usarse su correspondiente default [2].

A continuación presentamos un ejemplo donde se muestra la forma correcta de utilizar las opciones por defecto else y default. Para ello, se debe seguir el siguiente procedimiento:

  1. Como parte de la validación inicial, debemos verificar que exista más de un argumento al llamar al programa. Para ello utilizamos la siguiente porción de código:

    conditionalvalidation.cs
    1
    2
    3
    4
    5
    6
    7
    8
    using System;
    
    class Program{
      static void Main(string[] args){
        if (args.Length < 1){
          Console.WriteLine("El programa espera un argumento.");
        }
    ...
    
  2. Si el número de argumentos es el esperado, se verifica que el argumento tenga solo un carácter.

    1
    2
        else if (args[0].Length == 1){
    ...
    
  3. En caso de que se cumplan todas las condiciones, se muestra un mensaje si se eligió la opción 0 ó 1, u otro diferente si se eligió la opción 2.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
      switch (args[0]){
        case "0":
          Console.WriteLine("Primera opción seleccionada.");
          break;
    
        case "1":
          Console.WriteLine("Primera opción seleccionada.");
          break;
    
        case "2":
          Console.WriteLine("Segunda opción seleccionada.");
          break;
    ...
    
  4. En caso de que se ingrese una opción no contemplada, se muestra un mensaje de error:

    1
    2
    3
    4
        default:
          Console.WriteLine("La opción ingresada no es válida.");
          break;
        }
    
  5. De forma similar, mostramos un mensaje de error cuando no se ingresa el número esperado de argumentos:

    1
    2
    3
    4
    5
    6
        }
        else{
          Console.WriteLine("Se espera como argumento una opción de un solo carácter.");
        }
      }
    }
    
  6. Se compila y ejecuta el programa con diferentes entradas. De esta forma comprobamos que su comportamiento es el esperado ante diferentes tipos de argumentos.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    \>csc DefaultOptions.cs
    
    \>DefaultOptions
    El programa espera un argumento.
    
    \>DefaultOptions hola
    Se espera como argumento una opción de un solo carácter.
    
    \>DefaultOptions h
    La opción ingresada no es válida.
    
    \>DefaultOptions 5
    La opción ingresada no es válida.
    
    \>DefaultOptions 0
    Primera opción seleccionada.
    
    \>DefaultOptions 1
    Primera opción seleccionada.
    
    \>DefaultOptions 2
    Segunda opción seleccionada.
    



Haz un comentario

Estado de los servicios - Términos de Uso