Parcours
/
C#
C#
/
Exercices
/
Système d'authentification
Système d'authentification

Système d'authentification

Exercice d'apprentissage

Introduction

Constantes

Le modificateur const peut être appliqué (et devrait généralement l'être) à tout champ dont la valeur est connue à la compilation et ne change pas pendant toute la durée de vie du programme.

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

Le modificateur readonly peut être appliqué (et devrait généralement l'être) à tout champ qui ne peut pas être déclaré const, dont la valeur ne change pas pendant toute la durée de vie du programme et qui est initialisé soit par un initialiseur en ligne, soit au moment de l'instanciation (par le constructeur ou par une méthode appelée par le constructeur).

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

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

Copie défensive

Dans les situations sensibles du point de vue de la sécurité (ou même simplement dans une grande base de code où les développeurs ont des priorités et des objectifs différents), il faut éviter de laisser contourner l'API publique d'une classe en acceptant et en stockant les paramètres mutables d'une méthode, ou en exposant un membre mutable d'une classe via une valeur de retour ou un paramètre out.

Collections en lecture seule

Le modificateur readonly empêche que la valeur ou la référence d'un champ soit écrasée, mais il n'offre aucune protection pour les membres d'un type référence.

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

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

Pour garantir que tous les membres d'un type référence sont protégés, on peut rendre les champs readonly et définir des propriétés automatiques sans accesseur set.

La Base Class Library (BCL) fournit des versions en lecture seule de certaines collections lorsqu'il faut empêcher la modification des membres d'une collection. Elles se présentent sous forme de wrappers :

  • ReadOnlyDictionary<T> expose un Dictionary<T> en lecture seule.
  • ReadOnlyCollection<T> expose un List<T> en lecture seule.

Instructions

Le système d'authentification que tu as vu pour la dernière fois dans developer-privileges a besoin d'un peu d'attention. On t'a chargé de nettoyer le code. Un tel projet de nettoyage ne facilitera pas seulement la vie des futurs mainteneurs, il mettra aussi au jour et corrigera quelques vulnérabilités de sécurité.

1. Passe les champs et propriétés appropriés en const

C'est une tâche de réécriture. Ajoute le modificateur const à tous les membres de Authenticator ou Identity que tu juges appropriés.

2. Passe les champs appropriés en readonly

C'est une tâche de réécriture. Ajoute le modificateur readonly à tous les champs de la classe Authenticator ou de la structure Identity que tu juges appropriés.

3. Fais en sorte que la classe ne puisse pas être modifiée une fois qu'elle a été créée

Supprime l'accesseur set ou rends-le private pour toute propriété appropriée de la classe Authenticator ou de la structure Identity.

4. Fais en sorte que l'on ne puisse pas trafiquer l'admin

Pour l'instant, le champ d'identité admin est renvoyé par un appel à Admin. Ce n'est pas idéal, car l'appelant peut modifier ce champ. Trouve un moyen d'empêcher l'appelant de modifier les détails de l'admin sur l'objet Authenticator.

5. Fais en sorte que l'on ne puisse pas trafiquer les développeurs

Pour l'instant, le dictionnaire qui contient les identités de développeurs privilégiés « en dur » est renvoyé par un appel à GetDevelopers(). Ce n'est pas idéal, car l'appelant peut modifier ce dictionnaire. Trouve un moyen d'empêcher l'appelant de modifier les détails des développeurs sur l'objet Authenticator.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
C# Exercism

Prêt à commencer Système d'authentification ?

Inscris-toi sur Exercism pour apprendre et maîtriser C# avec 62 concepts178 exercices, et un vrai mentorat humain, le tout gratuitement.