Tracks
/
C#
C#
/
Ejercicios
/
Sistema de autenticación
Sistema de autenticación

Sistema de autenticación

Ejercicio de aprendizaje

Introducción

Constantes

El modificador const se puede aplicar (y por lo general se debería aplicar) a cualquier campo cuyo valor se conozca en tiempo de compilación y que no cambie durante la vida del programa.

private const int num = 1729;
public const string title = "Grand" + " Master";

El modificador readonly se puede aplicar (y por lo general se debería aplicar) a cualquier campo que no se pueda declarar como const, cuyo valor no cambie durante la vida del programa y que se establezca ya sea con un inicializador en línea o durante la instanciación (mediante el constructor o un método llamado por el constructor).

private readonly int num;
private readonly System.Random rand = new System.Random();

public MyClass(int num)
{
    this.num = num;
}

Copia defensiva

En situaciones delicadas en cuanto a seguridad (o incluso simplemente en una base de código grande donde los desarrolladores tienen prioridades y objetivos distintos), deberías evitar que se pueda eludir la API pública de una clase aceptando y almacenando parámetros mutables de un método, o exponiendo un miembro mutable de una clase mediante un valor de retorno o como parámetro out.

Colecciones de solo lectura

Aunque el modificador readonly impide que el valor o la referencia de un campo se sobrescriba, no ofrece ninguna protección para los miembros de un tipo de referencia.

readonly List<int> ints = new List<int>();

void Foo()
{
    ints.Add(1);    // ok
    ints = new List<int>(); // fails to compile
}

Para garantizar que todos los miembros de un tipo de referencia estén protegidos, los campos se pueden marcar como readonly y se pueden definir propiedades automáticas sin un descriptor de acceso set.

La Biblioteca de Clases Base (BCL) ofrece algunas versiones de solo lectura de las colecciones cuando se necesita impedir que se actualicen los miembros de una colección. Estas vienen en forma de envoltorios:

  • ReadOnlyDictionary<T> expone un Dictionary<T> como de solo lectura.
  • ReadOnlyCollection<T> expone un List<T> como de solo lectura.

Instrucciones

El sistema de autenticación que viste por última vez en developer-privileges necesita un poco de atención. Se te ha encomendado limpiar el código. Un proyecto de limpieza así no solo les facilitará la vida a quienes mantengan el código en el futuro, sino que además expondrá y corregirá algunas vulnerabilidades de seguridad.

1. Marca como const los campos y las propiedades que corresponda

Esta es una tarea de refactorización. Agrega el modificador const a los miembros de Authenticator o Identity que consideres apropiados.

2. Marca como readonly los campos que corresponda

Esta es una tarea de refactorización. Agrega el modificador readonly a los campos de la clase Authenticator o de la estructura Identity que consideres apropiados.

3. Asegúrate de que la clase no se pueda cambiar una vez creada

Elimina el descriptor de acceso set o hazlo private en las propiedades correspondientes de la clase Authenticator o de la estructura Identity.

4. Asegúrate de que no se pueda manipular al administrador

Actualmente, el campo de identidad del administrador se devuelve mediante una llamada a Admin. Esto no es lo ideal, ya que quien llama puede modificar el campo. Encuentra la manera de evitar que quien llama modifique los detalles del administrador en el objeto Authenticator.

5. Asegúrate de que no se pueda manipular a los desarrolladores

Actualmente, el diccionario que contiene las identidades de desarrolladores privilegiados codificadas directamente se devuelve mediante una llamada a GetDevelopers(). Esto no es lo ideal, ya que quien llama puede modificar el diccionario. Encuentra la manera de evitar que quien llama modifique los detalles de los desarrolladores en el objeto Authenticator.

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
C# Exercism

¿Todo listo para empezar Sistema de autenticación?

Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.