reklama

Poznáváme C# a Microsoft .NET – 75. díl – Bezpečnost

Bezpečnost je pojmem, který je v souvislosti se softwarovými aplikacemi velmi často skloňován. Výjimkou není ani platforma .NET a tudíž dnešní článek se jí bude věnovat. Jelikož je tento článek úvodem do problematiky bezpečnosti, seznámíme se hlavně se základními principy implementace zabezpečení aplikací v rámci .NET.

Základní koncepty V oblasti vývoje softwarových aplikací je potřeba z bezpečností řešit několik otázek. Například jaké operace, aplikace nebo zásuvný modul, které pocházejí z nějakého méně důvěryhodného zdroje, například sítě internet, mohou po spuštění v našem počítači provádět. Asi se shodneme na tom, že by nebylo úplně šťastné kdyby, se na pozadí stažený zásuvný modul aplikace po stažení postaral o zasílání našich emailů správci webu nebo o nějaké další nepříjemné překvapení . Další řešenou problematikou v oblasti zabezpečení aplikací je fakt, že ne každá osoba pracující s aplikací má potřebná práva pro provádění všech operací, které daná aplikace poskytuje a je tedy potřeba rozlišit chování aplikace v závislosti na aktuálně pracujícím uživateli.

Tyto otázky jsou rámcem .NET řešeny velmi efektivně. Běhové prostředí CLR při nahrávání každé assembly sestavuje sadu informací o nahrávané assembly (legitimace sestavení - assembly evidence), kam mimo jiné zaznamená z jakého umístění je daná assembly nahrána. Na základě těchto informací jsou tedy assembly, jako základní jednotce pro přiřazení bezpečnostních práv, povoleny pouze specifické operace. Pro řešení otázky s různými osobami, které pracují s aplikací je rámec .NET připraven pracovat s několika různými druhy autentikace. Údaje získané pomocí mechanismu autentikace mohou být v aplikaci použity na rozlišení operací, které mohou osoby, pracující s aplikací, provádět. Pojďme se na tyto koncepty podívat pěkně zvlášť a trochu blíže.

Zabezpečení přístupu ke kódu Zapezpečení přístupu ke kódu – Code Access Security (CAS) je přístup využívaný rámcem .NET pro udělení stupně důvěry určité assembly. Pokud se kód v assembly pokouší přímo nebo nepřímo přistupovat k nějakému zdroji (soubor, proměnné prostředí..) a není mu udělena taková důvěra, kterou pro tento přístup potřebuje, je vyhozena výjimka SecurityException. To jakou důvěru určitá assembly získá je definováno pomocí dvou základních konceptů – kódových skupin a sad oprávnění.

Kódové skupiny seskupují assembly s určitými charakteristickými vlastnostmi. Mezi vlastnosti, které slouží k tomuto seskupování jsou například vydavatel assembly, adresář ze kterého assembly pochází či silné jméno assembly. Ke každé kódové skupině je přiřazena určitá sada oprávnění. Každé oprávnění se váže k určitým akcím, které mohou být kódem vykonány. Existuje oprávnění pro přístup k souborům, pro využívání izolovaných úložišť, používání proměnných prostředí a tak dále. Je tedy v praxi možné definovat kódovou skupinu, do níž budou spadat všechny assembly od určitého vydavatele a díky specifické sadě oprávnění definovat jaké všechny operace budou kódy v assembly od daného vydavatele smět vykonávat.

Kromě možnosti definovat vlastní kódové skupiny a sady oprávnění je zde i skupina předdefinovaných skupin (Lokální počítač, Lokální intranet, Internet..) i sad oprávnění (Veškerá oprávnění, Spouštění, Žádná oprávnění..). Správci systémů mohou kódové skupiny spravovat buď pomocí utility pro příkazový řádek (caspol.exe) nebo mnohem pohodlněji pomocí modulu snap-in konzole MMC.

Klepněte pro větší obrázek

Správa zabezpečení pomocí modulu snap-in konzole MMC Se zabezpečením přístupu kódu lze pracovat nejen na úrovni administračních nástrojů, ale také na úrovni zdrojového kódu. Touto problematikou se budeme hlouběji zabývat v příštím článku, ale nyní si alespoň řekneme, že každé oprávnění je představováno objekty určitého typu a že s těmito objekty lze provádět různé operace. Jednou s nejužívanější operací je operace vyžádání daného oprávnění, kde zjistíme zda-li volající kód disponuje potřebným oprávněním pro provedení specifické akce, na což můžeme v aplikaci nějakým způsobem reagovat.

//vytvorime objekt opravneni pristupu k souboru
FileIOPermission filePermission = new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:/file.dll");
try
{
      //vyzadame toto opravneni
      filePermission.Demand();
      Console.WriteLine("Pristup k souboru byl povolen! Aplikace ma dostatecna prava");
}
catch (SecurityException secEx)
{
     Console.WriteLine("Pristup k souboru byl odepren! Aplikace nema dostatecna opravneni");
}

Zabezpečení založené na rolích Zabezpečení přístupu ke kódu řeší problémy různých původů assembly. Jistě je to velmi inteligentní způsob toho jak odlišit jaké oprávnění má assembly od daného vydavatele čí z daného umístění získat , avšak kromě tohoto zabezpečení obsahuje rámec .NET podporu zabezpečení založeného na rolích. Při tomto způsobu zabezpečení jsme schopni určit chování aplikace v závislosti na tom, za je či není aktuální uživatel aplikace ve specifické roli.

Zajímavou informací je, že tento způsob oproti bezpečnosti přístupu ke kódu také znatelně rychlejší. Zabezpečení založené na rolích je implementováno pouze na úrovni zdrojového kódu aplikace. Při implementaci tohoto typu zabezpečení je využíváno kontextu zabezpečení uživatele, který je představován typem implementujícím rozhraní IPrincipal. Těchto typů je několik a toho správného je použito v závislosti na tom s jakým způsobem ověřování je asociována daná aplikační doména. Asi nejčastěji je využíváno integrovaného ověřování systému Windows, ale používá se i ověřování technologie ASP .NET či technologie passport. Existují i další a dobré je vědět, že tuto množinu lze doplnit vlastní implementací.

//nastavime politiku vazani identity          AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
           
//ziskame objekt predstavujici uzivatele
IPrincipal principal = Thread.CurrentPrincipal;
//zjistime jestli je obsazen v roli Administrator
bool isAdmin = principal.IsInRole("Administrator");

if (isAdmin)
{
    Console.WriteLine("Uzivatel je obsazen v roli Administrator");
}
else
{
    Console.WriteLine("Uzivatel neni obsazen v roli Administrator");
}

Tolik ke stručnému představení bezpečnosti založené na rolích. Podobně jako v případě zabezpečení přístupu ke kódu, tak i tomto způsobu zabezpečení bude podrobněji pojednávat jeden z dalších článků.

Příklady ke článku lze stáhnout zde.

Příští díl bude podrobněji pojednávat o bezpečnosti přístupu ke kódu.

Témata článku: Software, Microsoft, Programování, Bezpečnost, Snap, Nema, Catch

6 komentářů

Nejnovější komentáře

  • aredhel 24. 6. 2006 18:33:49
    autentikace ma byt co, autentizace?

    autentikace = autentizace =...
  • gully, gully 22. 6. 2006 10:35:05
    Ano, je to zcela legalni. Je to vydane se souhlasem jak pana Puse, tak i...
  • mifko 20. 6. 2006 13:33:43
    Bohuzial, slovo ramec sa ozaj ako ekvivalent slova...
reklama
Určitě si přečtěte

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

** V Brně byl velký výpadek služeb UPC ** Důvodem je překopnutý páteřní kabel ** V některých lokalitách služby stále nefungují

5.  12.  2016 | Jakub Čížek | 104

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

** Zmizí klasické vyhledávače ** Budeme programovat buňky ** Kvantové počítače překonají šifry

6.  12.  2016 | Jakub Čížek | 36

11 tipů na dobrý stolní počítač: od základu po herní mašiny

11 tipů na dobrý stolní počítač: od základu po herní mašiny

** Postavte si stolní počítač! Máme pro vás 11 vzorových sestav s rozpisem komponent ** Většina tipů cílí na hráče, věnujeme se ale i základnímu PC a počítačům na střih videa ** Nadělte si nový počítač třeba pod stromeček

5.  12.  2016 | Adam Kahánek | 74

Nejlepší notebooky nad 20 tisíc: poradíme, které teď chcete

Nejlepší notebooky nad 20 tisíc: poradíme, které teď chcete

** V notebooku s cenou nad 20 tisíc nesmí chybět kvalitní displej a rychlé úložiště ** Za dalších deset tisíc můžete dostat navíc styl nebo výkonnější komponenty ** Vybírat můžete z různých velikostí i konstrukcí

8.  12.  2016 | Stanislav Janů | 85


reklama