Sdílet prostřednictvím


Pokyny pro zabezpečené kódování

Většina kódu aplikace může jednoduše používat infrastrukturu implementovanou rozhraním .NET. V některých případech se vyžaduje další zabezpečení specifické pro aplikaci, a to buď rozšířením systému zabezpečení, nebo použitím nových ad hoc metod.

Pomocí vynucených oprávnění .NET a dalších vynucení v kódu byste měli vytvořit bariéry, abyste zabránili škodlivému kódu v přístupu k informacím, které nechcete, aby měl nebo prováděl jiné nežádoucí akce. Kromě toho musíte zajistit rovnováhu mezi zabezpečením a použitelností ve všech očekávaných scénářích pomocí důvěryhodného kódu.

Tento přehled popisuje různé způsoby návrhu kódu pro práci se systémem zabezpečení.

Zabezpečení přístupu k prostředkům

Při navrhování a psaní kódu potřebujete chránit a omezit přístup, který má kód k prostředkům, zejména při použití nebo vyvolání kódu neznámého původu. Proto mějte na paměti následující techniky, které zajistí zabezpečení kódu:

  • Nepoužívejte zabezpečení přístupu kódu (CAS).

  • Nepoužívejte částečný důvěryhodný kód.

  • Nepoužívejte atribut AllowPartiallyTrustedCaller (APTCA).

  • Nepoužívejte vzdálené komunikace .NET.

  • Nepoužívejte model DCOM (Distributed Component Object Model).

  • Nepoužívejte binární formátovací moduly.

Zabezpečení přístupu kódu a transparentní kód zabezpečení nejsou podporovány jako hranice zabezpečení s částečně důvěryhodným kódem. Kód neznámého původu nedoporučujeme načítat ani spouštět, pokud nejsou nastavená alternativní bezpečnostní opatření. Alternativní bezpečnostní opatření jsou:

  • Virtualizace

  • AppContainers

  • Uživatelé a oprávnění operačního systému

  • Kontejnery Hyper-V

Kód neutrální pro zabezpečení

Kód neutrální pro zabezpečení nijak explicitně neprovádí se systémem zabezpečení. Spustí se s libovolnou oprávněními, která obdrží. I když aplikace, které nezachytí výjimky zabezpečení spojené s chráněnými operacemi (například pomocí souborů, sítí atd.), můžou vést k neošetřené výjimce, kód neutrální zabezpečení stále využívá technologie zabezpečení v .NET.

Knihovna neutrální zabezpečení má zvláštní charakteristiky, kterým byste měli rozumět. Předpokládejme, že vaše knihovna poskytuje prvky rozhraní API, které používají soubory nebo volají nespravovaný kód. Pokud váš kód nemá odpovídající oprávnění, nespustí se podle popisu. I když ale kód má oprávnění, musí mít každý kód aplikace, který ho volá, stejné oprávnění, aby fungoval. Pokud volající kód nemá správné oprávnění, SecurityException zobrazí se jako výsledek procházky zásobníkem zabezpečení přístupu kódu.

Kód aplikace, který není opakovaně použitelnou komponentou

Pokud je váš kód součástí aplikace, která nebude volána jiným kódem, zabezpečení je jednoduché a speciální kódování nemusí být povinné. Nezapomeňte ale, že škodlivý kód může volat váš kód. I když zabezpečení přístupu kódu může zabránit škodlivému kódu v přístupu k prostředkům, mohl by takový kód stále číst hodnoty polí nebo vlastností, které můžou obsahovat citlivé informace.

Kromě toho platí, že pokud váš kód přijímá uživatelský vstup z internetu nebo jiných nespolehlivých zdrojů, musíte být opatrní ohledně škodlivého vstupu.

Spravovaná obálka pro implementaci nativního kódu

V tomto scénáři se obvykle implementuje některé užitečné funkce v nativním kódu, který chcete zpřístupnit spravovanému kódu. Spravované obálky se dají snadno zapisovat pomocí volání platformy nebo zprostředkovatele komunikace modelu COM. Pokud to ale uděláte, volající obálky musí mít nespravovaná práva na kód, aby bylo možné uspět. Ve výchozím nastavení to znamená, že kód stažený z intranetu nebo internet nebude s obálkami fungovat.

Místo udělení nespravovaných práv ke kódu všem aplikacím, které tyto obálky používají, je lepší dát tato práva pouze obálku kódu. Pokud základní funkce nezpřístupňuje žádné prostředky a implementace je stejně bezpečná, obálka musí uplatnit pouze svá práva, což umožňuje volání jakéhokoli kódu. Při zapojení prostředků by kódování zabezpečení mělo být stejné jako případ kódu knihovny popsaný v další části. Vzhledem k tomu, že obálka potenciálně vystavuje volajícím tyto prostředky, je nutné pečlivě ověřit bezpečnost nativního kódu a je zodpovědností obálky.

Kód knihovny, který zveřejňuje chráněné prostředky

Následující přístup je nejvýkonnější a potenciálně nebezpečný (pokud není správně) pro kódování zabezpečení: knihovna slouží jako rozhraní pro přístup k určitým prostředkům, které nejsou jinak dostupné, stejně jako třídy .NET vynucují oprávnění pro prostředky, které používají. Kdykoli prostředek zveřejníte, musí váš kód nejprve požadovat oprávnění odpovídající prostředku (to znamená, že musí provést kontrolu zabezpečení) a pak obvykle uplatňovat jeho práva k provedení skutečné operace.

Viz také