Sdílet prostřednictvím


Účelové řetězce v ASP.NET Core

Komponenty, které spotřebovávajíIDataProtectionProvider, musí metodě předat jedinečný parametrCreateProtector. Účelem parametru je zabezpečení systému ochrany dat, protože poskytuje izolaci mezi kryptografickými příjemci, i když jsou kořenové kryptografické klíče stejné.

Pokud příjemce určuje účel, použije se řetězec účelu spolu s kořenovými kryptografickými klíči k odvození kryptografických podklíčů jedinečných pro daného příjemce. Tím se izoluje příjemce od všech ostatních kryptografických příjemců v aplikaci: žádná jiná komponenta nemůže číst jeho datové části a nemůže číst datové části jiných komponent. Tato izolace také vykreslí neproveditelné celé kategorie útoku na komponentu.

Purpose Diagram Example

Ve výše uvedeném IDataProtector diagramu instance A a B nemohou číst datové části ostatních, pouze jejich vlastní.

Řetězec účelu nemusí být tajný. Měl by být jednoduše jedinečný v tom smyslu, že žádná jiná dobře chovaná komponenta nikdy neposkytne stejný účelový řetězec.

Tip

Použití oboru názvů a názvu typu komponenty, která využívá rozhraní API ochrany dat, je dobrým pravidlem, protože v praxi tyto informace nebudou nikdy v konfliktu.

Komponenta kopírovaná společností Contoso, která je zodpovědná za vytváření nosných tokenů, může jako účelový řetězec používat Contoso.Security.BearerToken. Nebo může jako účelový řetězec použít Contoso.Security.BearerToken.v1. Připojení čísla verze umožňuje budoucí verzi používat Contoso.Security.BearerToken.v2 jako svůj účel a různé verze by byly zcela izolované od sebe, pokud jde o datové části.

Vzhledem k tomu, že účelem parametru CreateProtector je pole řetězců, bylo by výše uvedené pole zadáno jako [ "Contoso.Security.BearerToken", "v1" ]. To umožňuje vytvořit hierarchii účelů a otevře možnost scénářů s více tenanty se systémem ochrany dat.

Upozorňující

Komponenty by neměly umožňovat, aby nedůvěryhodný uživatelský vstup byl jediným zdrojem vstupu pro účely řetězu.

Představte si například komponentu Contoso.Messaging.SecureMessage, která zodpovídá za ukládání zabezpečených zpráv. Pokud by komponenta zabezpečeného zasílání zpráv volala CreateProtector([ username ]), může škodlivý uživatel vytvořit účet s uživatelským jménem "Contoso.Security.BearerToken" při pokusu o volání CreateProtector([ "Contoso.Security.BearerToken" ])komponenty, a tak neúmyslně způsobit systém zabezpečeného zasílání zpráv datové části, které by mohly být vnímány jako ověřovací tokeny.

Lepším účelem řetězce pro komponentu zasílání zpráv by bylo CreateProtector([ "Contoso.Messaging.SecureMessage", $"User: {username}" ]), což poskytuje správnou izolaci.

Izolace poskytovaná chováním a chováním IDataProtectionProvider, IDataProtectora účel jsou následující:

  • Pro daný IDataProtectionProvider objekt CreateProtector vytvoří IDataProtector metoda objekt jednoznačně svázaný s IDataProtectionProvider objektem, který ho vytvořil, i s parametrem účelu, který byl předán metodě.

  • Parametr účelu nesmí být null. (Pokud je účel zadán jako matice, znamená to, že pole nesmí mít nulovou délku a všechny prvky pole musí být nenulové.) Účel prázdného řetězce je technicky povolený, ale nedoporučuje se.

  • Dva argumenty jsou ekvivalentní, pokud a pouze pokud obsahují stejné řetězce (pomocí řadového porovnávače) ve stejném pořadí. Argument s jedním účelem je ekvivalentní odpovídajícímu poli s jedním prvkem.

  • Dva IDataProtector objekty jsou ekvivalentní, pokud jsou vytvořeny z ekvivalentních IDataProtectionProvider objektů s ekvivalentními parametry.

  • U daného IDataProtector objektu volání Unprotect(protectedData) vrátí původní unprotectedData , pokud a pouze v případě protectedData := Protect(unprotectedData) ekvivalentního IDataProtector objektu.

Poznámka

Nebereme v úvahu případ, kdy některá komponenta záměrně zvolí účelový řetězec, o kterém je známo, že je v konfliktu s jinou komponentou. Taková komponenta by se v podstatě považovala za škodlivou a tento systém nemá v úmyslu poskytovat bezpečnostní záruky v případě, že škodlivý kód už běží uvnitř pracovního procesu.