Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Liberar Recursos

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la creación, manipulación y eliminación correcta de recursos dentro de un programa C#, evitando que información disponible en memoria pueda ser capturada por usuarios no autorizados.

Necesidad

Liberar recursos de forma apropiada.

Contexto

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

  1. Se está desarrollando una aplicación en C# versión 4.0 o superior.

  2. Si se está usando una versión de C# anterior a 4.0, ver Liberación de recursos en ASP.NET.

  3. El código fuente debe estar implementado de tal forma que cierre cualquier recurso que se encuentre abierto y no esté siendo utilizado.[1]

Solución

  1. En primer lugar, se utilizan los espacios de nombre System y System.IO, para imprimir por la salida estándar del sistema y para hacer uso de la clase StreamReader:

    resource.cs
    1
    2
    using System;
    using System.IO;
    
  2. Posteriormente, se abre el archivo "Release.cs" para ser leído. El contenido de dicho archivo es simplemente un bloque de código C# de ejemplo, el cual imprime un mensaje de saludo desde la salida estándar. Por otra parte, el uso de using permite que la instancia de StreamReader sea liberada al salir del bloque. Esto ocurre gracias a que la clase cumple con la interfaz IDisposable[2] al heredar de TextReader[3] que la implementa:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    namespace FSG
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    String line;
                    using (StreamReader sr = new StreamReader("Release.cs"))
                    {
    
  3. Se lee línea a línea el contenido del archivo y se muestra por salida estándar:

    1
    2
    3
    4
     while ((line = sr.ReadLine()) != null)
     {
       Console.WriteLine(line);
     }
    
  4. Por último, también es posible liberar los recursos de manera explícita a través del método StreamReader.Close(), aunque, como ya se dijo, este paso no es necesario debido al uso de la interfaz IDisposable:

    1
    2
    3
     sr.Close();
    
    }
    
  5. En caso de que al archivo no haya podido ser leído, por ejemplo si no existía, se muestra un mensaje en la salida estándar del sistema:

    1
    2
    3
    4
    5
    6
    7
    }catch (Exception)
                {
                    Console.WriteLine("File can't be opened");
                }
            }
        }
    }
    
  6. Con el fin de ejecutar el anterior programa, desde la terminal nos debemos ubicar primero en el directorio del proyecto y, en el caso de sistemas basados en Linux, se debe instalar los comandos mcs y mono los cuales permiten ejecutar aplicaciones desarrolladas en C# desde Linux. Ejecutamos el comando mcs seguido del nombre del archivo:

    1
    2
    3
    4
    5
    $ ls
    Release.cs resource.cs
    $ mcs resource.cs
    $ ls
    Release.cs  resource.cs  resource.exe
    
  7. Luego de compilar el programa correctamente, se obtiene el bytecode (archivo .exe) del programa y se procede a ejecutar el mismo mediante el comando mono:

    1
    $ mono resource.exe
    
  8. La salida en consola luego de ejecutar el programa es la siguiente (en este caso el contenido del fichero es código C# como se mencionó anteriormente):

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    using System;
    using System.IO;
    
    namespace FSG
    {
        class Release
        {
            static void Main(string[] args)
            {
               Console.WriteLine("Hello from Test!");
            }
        }
    }
    

Descargas

Puedes descargar el código fuente pulsando en el siguiente enlace:

  1. Resource.cs contiene las instrucciones C# anteriores.




Haz un comentario

Estado de los servicios - Términos de Uso