Rutas
/
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) a cualquier campo cuyo valor se conozca en tiempo de compilación y 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) a cualquier campo que no pueda ser const, cuyo valor no cambie durante la vida del programa y que se establezca mediante un inicializador en línea o durante la instanciación (por el constructor o por 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 sensibles para la 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 a través de un valor devuelto o como parámetro out.

Colecciones de solo lectura

Aunque el modificador readonly impide que se sobrescriba el valor o la referencia de un campo, 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) proporciona algunas versiones de solo lectura de colecciones cuando es necesario impedir que se actualicen los miembros de una colección. Estas adoptan la 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 encargado la tarea de limpiar el código. Un proyecto de limpieza como este no solo les facilitará la vida a los futuros mantenedores, sino que también sacará a la luz y corregirá algunas vulnerabilidades de seguridad.

1. Establece los campos y propiedades apropiados como const

Esta es una tarea de refactorización. Añade el modificador const a aquellos miembros de Authenticator o Identity que consideres apropiados.

2. Establece los campos apropiados como readonly

Esta es una tarea de refactorización. Añade el modificador readonly a aquellos 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 accessor set o hazlo private en cualquier propiedad apropiada de la clase Authenticator o de la estructura Identity.

4. Asegúrate de que no se pueda manipular el 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 forma de impedir que quien llama modifique los datos 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 los 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 forma de impedir que quien llama modifique los datos de los desarrolladores en el objeto Authenticator.

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

¿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.