Biztonságos kódolási irányelvek
A legtöbb alkalmazáskód egyszerűen használhatja a .NET által implementált infrastruktúrát. Bizonyos esetekben további alkalmazásspecifikus biztonságra van szükség, amelyet a biztonsági rendszer kibővítésével vagy új alkalmi módszerekkel lehet létrehozni.
A .NET által kikényszerített engedélyek és egyéb kényszerítés használata a kódban akadályt képez, hogy megakadályozza, hogy a rosszindulatú kódok hozzáférjenek azokhoz az információkhoz, amelyeket nem szeretne, vagy más nemkívánatos műveleteket hajt végre. Emellett egyensúlyt kell teremtenie a biztonság és a használhatóság között az összes várt forgatókönyvben, megbízható kód használatával.
Ez az áttekintés azt ismerteti, hogy a kód hogyan tervezhető úgy, hogy működjön a biztonsági rendszerrel.
Az erőforrás-hozzáférés védelme
A kód tervezésekor és írásakor védenie kell és korlátoznia kell a kód erőforrásaihoz való hozzáférést, különösen akkor, ha ismeretlen eredetű kódot használ vagy invoktál. Ezért tartsa szem előtt a következő technikákat a kód biztonságossá tételéhez:
Ne használja a Code Access Securityt (CAS).
Ne használjon részlegesen megbízható kódot.
Ne használja az AllowPartiallyTrustedCaller attribútumot (APTCA).
Ne használjon .NET-újraküldést.
Ne használjon elosztott összetevő-objektummodellt (DCOM).
Ne használjon bináris formázókat.
A kódhozzáférési biztonság és a biztonsági transzparens kód nem támogatott biztonsági határként részben megbízható kóddal. Javasoljuk, hogy az ismeretlen eredetű kód betöltése és végrehajtása alternatív biztonsági intézkedések végrehajtása nélkül ne kerüljön sor. Az alternatív biztonsági intézkedések a következők:
Virtualizáció
AppContainers
Operációs rendszer felhasználói és engedélyei
Hyper-V-tárolók
Biztonsági-semleges kód
A biztonsági-semleges kód nem tesz explicit módon a biztonsági rendszerrel. Bármilyen engedély birtokában fut. Bár a védett műveletekhez (például fájlok, hálózatkezelés stb.) kapcsolódó biztonsági kivételeket nem tartalmazó alkalmazások kezeletlen kivételt eredményezhetnek, a biztonságsemleges kód továbbra is kihasználja a .NET biztonsági technológiáit.
A biztonságsemleges kódtárak speciális jellemzőkkel rendelkeznek, amelyeket érdemes ismernie. Tegyük fel, hogy a kódtár olyan API-elemeket biztosít, amelyek fájlokat használnak, vagy nem felügyelt kódot hívnak meg. Ha a kód nem rendelkezik a megfelelő engedéllyel, az nem a leírtak szerint fog futni. Ha azonban a kód rendelkezik engedéllyel, az azt hívó alkalmazáskódnak ugyanazzal az engedéllyel kell rendelkeznie a működéshez. Ha a hívó kód nem rendelkezik a megfelelő engedéllyel, a kódelérési biztonsági verem séta eredményeként megjelenik egy SecurityException .
Nem újrafelhasználható összetevőt tartalmazó alkalmazáskód
Ha a kód egy olyan alkalmazás része, amelyet más kód nem hív meg, a biztonság egyszerű, és előfordulhat, hogy nincs szükség speciális kódolásra. Ne feledje azonban, hogy a rosszindulatú kód meghívhatja a kódot. Bár a kódhozzáférés biztonsága megakadályozhatja, hogy rosszindulatú kódok hozzáférjenek az erőforrásokhoz, az ilyen kód továbbra is beolvashatja a bizalmas információkat tartalmazó mezők vagy tulajdonságok értékeit.
Továbbá, ha a kód elfogadja a felhasználói bemenetet az internetről vagy más megbízhatatlan forrásokból, óvatosnak kell lennie a rosszindulatú bemenetekkel.
Felügyelt burkoló natív kód implementálása
Ebben a forgatókönyvben általában néhány hasznos funkció natív kódban van implementálva, amelyet elérhetővé szeretne tenni a felügyelt kód számára. A felügyelt burkolók könnyen írhatók platformhívással vagy COM-interop használatával. Ha azonban ezt teszi, a burkoló hívóinak nem felügyelt kódjogokkal kell rendelkezniük a sikeresség érdekében. Az alapértelmezett házirendben ez azt jelenti, hogy az intranetről vagy az internetről letöltött kód nem fog működni a burkolókkal.
Ahelyett, hogy nem felügyelt kódjogokat adna az összes ilyen burkolót használó alkalmazásnak, jobb, ha ezeket a jogokat csak a burkolókódnak adja. Ha a mögöttes funkció nem tesz elérhetővé erőforrásokat, és az implementáció is biztonságos, a burkolónak csak érvényesítenie kell a jogait, ami lehetővé teszi, hogy bármilyen kód meghívja azt. Ha erőforrásokról van szó, a biztonsági kódolásnak meg kell egyeznie a következő szakaszban ismertetett kódtárkód-esetével. Mivel a burkoló potenciálisan kiteszik a hívókat ezeknek az erőforrásoknak, a natív kód biztonságának gondos ellenőrzése szükséges, és a burkoló feladata.
Védett erőforrásokat elérhetővé tevő kódtárkód
A következő megközelítés a leghatékonyabb és ezért potenciálisan veszélyes (ha helytelenül végzik el) a biztonsági kódoláshoz: a kódtár más kód interfészeként szolgál bizonyos, egyébként nem elérhető erőforrások eléréséhez, ahogyan a .NET-osztályok az általuk használt erőforrásokra vonatkozó engedélyeket kényszerítik ki. Bárhol is tegye elérhetővé az erőforrást, a kódnak először az erőforrásnak megfelelő engedélyt kell kérnie (vagyis biztonsági ellenőrzést kell végeznie), majd általában érvényesítenie kell a tényleges művelet végrehajtásához szükséges jogosultságait.