Tracks
/
C#
C#
/
Übungen
/
Authentifizierungssystem
Authentifizierungssystem

Authentifizierungssystem

Lernübung

Einführung

Konstanten

Der const-Modifizierer kann auf jedes Feld angewendet werden (und sollte es im Allgemeinen auch), dessen Wert zur Kompilierzeit bekannt ist und sich während der Laufzeit des Programms nicht ändert.

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

Der readonly-Modifizierer kann auf jedes Feld angewendet werden (und sollte es im Allgemeinen auch), das nicht zu const gemacht werden kann und dessen Wert sich während der Laufzeit des Programms nicht ändert und das entweder durch einen Inline-Initialisierer oder während der Instanziierung festgelegt wird (durch den Konstruktor oder eine vom Konstruktor aufgerufene Methode).

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

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

Defensives Kopieren

In sicherheitskritischen Situationen (oder auch einfach in einer großen Codebasis, in der Entwickler unterschiedliche Prioritäten und Ziele haben) solltest du vermeiden, dass die öffentliche API einer Klasse umgangen werden kann, indem du veränderliche Parameter einer Methode akzeptierst und speicherst oder ein veränderliches Mitglied einer Klasse über einen Rückgabewert oder einen out-Parameter offenlegst.

Schreibgeschützte Sammlungen

Während der readonly-Modifizierer verhindert, dass der Wert oder die Referenz in einem Feld überschrieben wird, bietet er keinen Schutz für die Mitglieder eines Referenztyps.

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

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

Um sicherzustellen, dass alle Mitglieder eines Referenztyps geschützt sind, können die Felder als readonly deklariert und automatische Eigenschaften ohne einen set-Accessor definiert werden.

Die Base Class Library (BCL) stellt einige schreibgeschützte Versionen von Sammlungen bereit, wenn die Anforderung besteht, zu verhindern, dass Mitglieder einer Sammlung aktualisiert werden. Diese gibt es in Form von Wrappern:

  • ReadOnlyDictionary<T> stellt ein Dictionary<T> als schreibgeschützt bereit.
  • ReadOnlyCollection<T> stellt ein List<T> als schreibgeschützt bereit.

Anleitung

Das Authentifizierungssystem, das du zuletzt in developer-privileges gesehen hast, braucht etwas Aufmerksamkeit. Du wurdest damit beauftragt, den Code aufzuräumen. Ein solches Aufräumprojekt macht nicht nur zukünftigen Maintainern das Leben leichter, sondern deckt auch einige Sicherheitslücken auf und behebt sie.

1. Setze geeignete Felder und Eigenschaften auf const

Dies ist eine Refactoring-Aufgabe. Füge den const-Modifier zu allen Membern von Authenticator oder Identity hinzu, die du für geeignet hältst.

2. Setze geeignete Felder auf readonly

Dies ist eine Refactoring-Aufgabe. Füge den readonly-Modifier zu allen Feldern der Klasse Authenticator oder der Struktur Identity hinzu, die du für geeignet hältst.

3. Stelle sicher, dass die Klasse nach ihrer Erstellung nicht geändert werden kann

Entferne den set-Accessor oder mache ihn private für jede geeignete Eigenschaft der Klasse Authenticator oder der Struktur Identity.

4. Stelle sicher, dass der Admin nicht manipuliert werden kann

Derzeit gibt ein Aufruf von Admin das Feld mit der Admin-Identität zurück. Das ist nicht ideal, denn der Aufrufer kann das Feld verändern. Finde einen Weg, um zu verhindern, dass der Aufrufer die Details des Admins am Authenticator-Objekt verändern kann.

5. Stelle sicher, dass die Entwickler nicht manipuliert werden können

Derzeit gibt ein Aufruf von GetDevelopers() das Wörterbuch zurück, das die fest codierten privilegierten Entwickleridentitäten enthält. Das ist nicht ideal, denn der Aufrufer kann das Wörterbuch verändern. Finde einen Weg, um zu verhindern, dass der Aufrufer die Details der Entwickler am Authenticator-Objekt verändern kann.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
C# Exercism

Bereit, mit Authentifizierungssystem zu starten?

Melde dich bei Exercism an, um C# mit 62 Konzepte178 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.