Track
/
C#
C#
/
Esercizi
/
Sistema di autenticazione
Sistema di autenticazione

Sistema di autenticazione

Esercizio di apprendimento

Introduzione

Costanti

Il modificatore const può essere applicato (e in genere dovrebbe esserlo) a qualsiasi campo il cui valore sia noto in fase di compilazione e non cambi durante la vita del programma.

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

Il modificatore readonly può essere applicato (e in genere dovrebbe esserlo) a qualsiasi campo che non possa essere reso const, il cui valore non cambi durante la vita del programma e che venga impostato tramite un inizializzatore inline oppure durante l'istanziazione (dal costruttore o da un metodo chiamato dal costruttore).

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

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

Copia difensiva

Nelle situazioni sensibili alla sicurezza (o anche semplicemente in una grande base di codice, dove gli sviluppatori hanno priorità e obiettivi diversi) dovresti evitare di permettere che l'API pubblica di una classe venga aggirata accettando e memorizzando parametri mutabili di un metodo oppure esponendo un membro mutabile di una classe tramite un valore restituito o come parametro out.

Collezioni readonly

Mentre il modificatore readonly impedisce che il valore o il riferimento contenuto in un campo venga sovrascritto, non offre alcuna protezione per i membri di un tipo di riferimento.

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

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

Per assicurarti che tutti i membri di un tipo di riferimento siano protetti, puoi rendere i campi readonly e definire proprietà automatiche senza una funzione di accesso set.

La Base Class Library (BCL) fornisce alcune versioni readonly delle collezioni, pensate per bloccare l'aggiornamento dei membri di una collezione. Si presentano sotto forma di wrapper:

  • ReadOnlyDictionary<T> espone un Dictionary<T> in sola lettura.
  • ReadOnlyCollection<T> espone una List<T> in sola lettura.

Istruzioni

Il sistema di autenticazione che hai visto l'ultima volta in developer-privileges ha bisogno di un po' di attenzione. Ti è stato affidato il compito di riorganizzare il codice. Un progetto di riorganizzazione come questo non solo renderà la vita più facile ai futuri manutentori, ma farà emergere e correggerà anche alcune vulnerabilità di sicurezza.

1. Rendi const i campi e le proprietà appropriati

Questo è un compito di riorganizzazione. Aggiungi il modificatore const ai membri di Authenticator o Identity che ritieni appropriati.

2. Rendi readonly i campi appropriati

Questo è un compito di riorganizzazione. Aggiungi il modificatore readonly ai campi della classe Authenticator o della struct Identity che ritieni appropriati.

3. Assicurati che la classe non possa essere modificata una volta creata

Rimuovi l'accessor set o rendilo private per ogni proprietà appropriata della classe Authenticator o della struct Identity.

4. Assicurati che l'admin non possa essere manomesso

Al momento il campo dell'identità dell'admin viene restituito da una chiamata a Admin. Non è l'ideale: il chiamante può modificare il campo. Trova un modo per impedire al chiamante di modificare i dettagli dell'admin sull'oggetto Authenticator.

5. Assicurati che gli sviluppatori non possano essere manomessi

Al momento il dizionario che contiene le identità degli sviluppatori privilegiati, codificate a mano, viene restituito da una chiamata a GetDevelopers(). Non è l'ideale: il chiamante può modificare il dizionario. Trova un modo per impedire al chiamante di modificare i dettagli degli sviluppatori sull'oggetto Authenticator.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
C# Exercism

Vuoi iniziare Sistema di autenticazione?

Iscriviti a Exercism per imparare e padroneggiare C# con 62 concetti178 esercizi e il mentoring di persone reali, tutto gratis.