Kurzusok
/
C#
C#
/
Feladatok
/
Hitelesítési rendszer
Hitelesítési rendszer

Hitelesítési rendszer

Tanulófeladat

Bevezetés

Konstansok

A const módosító minden olyan mezőre alkalmazható (és általában alkalmazni is kell), amelynek az értéke fordítási időben ismert, és nem változik a program élettartama alatt.

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

A readonly módosító minden olyan mezőre alkalmazható (és általában alkalmazni is kell), amelyet nem lehet const-tá tenni, amelynek az értéke nem változik a program élettartama alatt, és amely vagy egy soron belüli kezdőértékkel, vagy a példányosítás során kap értéket (a konstruktorban vagy egy konstruktor által hívott metódusban).

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

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

Védekező másolás

Biztonságra érzékeny helyzetekben (vagy akár csak egy nagy kódbázison, ahol a fejlesztőknek különböző prioritásaik és szándékaik vannak) arra kell törekedned, hogy egy osztály nyilvános API-ját ne lehessen megkerülni azzal, hogy egy metódus módosítható paramétereit elfogadod és eltárolod, vagy hogy egy osztály módosítható tagját visszatérési értékként vagy out paraméterként kiadod.

Csak olvasható gyűjtemények

Bár a readonly módosító megakadályozza, hogy egy mező értékét vagy referenciáját felülírják, a referenciatípus tagjait semmilyen módon nem védi.

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

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

Ahhoz, hogy egy referenciatípus minden tagja védve legyen, a mezőket readonly-vá teheted, az automatikus tulajdonságokat pedig set elérő nélkül definiálhatod.

A Base Class Library (BCL) biztosít néhány csak olvasható változatot azokból a gyűjteményekből, amelyeknél meg kell akadályozni, hogy a gyűjtemény tagjai frissüljenek. Ezek burkolók formájában érkeznek:

  • A ReadOnlyDictionary<T> a Dictionary<T>-t csak olvashatóként teszi elérhetővé.
  • A ReadOnlyCollection<T> a List<T>-t csak olvashatóként teszi elérhetővé.

Utasítások

Az a hitelesítési rendszer, amelyet legutóbb a(z) developer-privileges feladatban láttál, egy kis figyelmet igényel. Azzal bíztak meg, hogy tisztítsd meg a kódot. Egy ilyen kódtisztítási projekt nemcsak megkönnyíti a jövőbeli karbantartók dolgát, hanem néhány biztonsági sebezhetőséget is felszínre hoz és kijavít.

1. Jelöld meg a megfelelő mezőket és tulajdonságokat const módosítóval

Ez egy refaktorálási részfeladat. Add hozzá a const módosítót az Authenticator vagy Identity azon tagjaihoz, amelyeket megfelelőnek tartasz.

2. Jelöld meg a megfelelő mezőket readonly módosítóval

Ez egy refaktorálási részfeladat. Add hozzá a readonly módosítót az Authenticator osztály vagy az Identity struct azon mezőihez, amelyeket megfelelőnek tartasz.

3. Biztosítsd, hogy az osztály a létrehozása után ne legyen módosítható

Távolítsd el a set elérőt, vagy tedd private-vá a megfelelő tulajdonságokon az Authenticator osztályban vagy az Identity structban.

4. Biztosítsd, hogy az admint ne lehessen manipulálni

Jelenleg az admin identitásmezőt az Admin hívása adja vissza. Ez nem ideális, mert a hívó módosíthatja a mezőt. Találj egy módot arra, hogy a hívó ne módosíthassa az admin adatait az Authenticator objektumon.

5. Biztosítsd, hogy a fejlesztőket ne lehessen manipulálni

Jelenleg a beégetett, kiváltságos fejlesztői identitásokat tartalmazó szótárat a GetDevelopers() hívása adja vissza. Ez nem ideális, mert a hívó módosíthatja a szótárat. Találj egy módot arra, hogy a hívó ne módosíthassa a fejlesztők adatait az Authenticator objektumon.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
C# Exercism

Készen állsz elkezdeni a(z) Hitelesítési rendszer feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C# nyelvet 62 fogalom178 feladat segítségével, valódi emberi mentorálással, mindez ingyen.