Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés
Ez a cikk a Windowsra vonatkozik.
A ASP.NET Core-ról további információt a ASP.NET Core Security áttekintésében talál.
A .NET szerepköralapú biztonságot nyújt a mobilkódokkal kapcsolatos biztonsági problémák kezeléséhez, valamint olyan támogatás biztosításához, amely lehetővé teszi az összetevők számára, hogy meghatározzák, hogy a felhasználók milyen műveletekre jogosultak.
Típusbiztonság és biztonság
A típusbiztos kód csak a hozzáférésre jogosult memóriahelyeket éri el. (Ebben a vitafórumban a típusbiztonság kifejezetten a memóriatípus biztonságára vonatkozik, és tágabb értelemben nem tévesztendő össze a típusbiztonsággal.) A típusbiztos kód például nem tudja beolvasni egy másik objektum privát mezőiből származó értékeket. Csak jól definiált, engedélyezett módon fér hozzá a típusokhoz.
Az igény szerinti (JIT-) fordítás során egy opcionális ellenőrzési folyamat megvizsgálja a JIT által natív gépi kódba lefordítandó metódus metaadatait és közös köztes nyelvét (CIL) annak ellenőrzéséhez, hogy biztonságosak-e. Ez a folyamat kimarad, ha a kód rendelkezik engedéllyel az ellenőrzés megkerülésére. Az ellenőrzéssel kapcsolatos további információkért lásd a felügyelt végrehajtási folyamatot.
Bár a típusbiztonság ellenőrzése nem kötelező a felügyelt kód futtatásához, a típusbiztonság kulcsfontosságú szerepet játszik a szerelvény elkülönítésében és a biztonsági kényszerítésben. Ha a kód típusbiztos, a közös futtatókörnyezet teljesen el tudja különíteni az egységeket egymástól. Ez az elkülönítés biztosítja, hogy a szerelvények ne befolyásolhassák hátrányosan egymást, és növelik az alkalmazások megbízhatóságát. A típusbiztos összetevők akkor is biztonságosan futtathatók ugyanabban a folyamatban, ha különböző szinteken megbízhatók. Ha a kód nem biztonságos, nemkívánatos mellékhatások léphetnek fel. A futtatókörnyezet például nem tudja megakadályozni, hogy a felügyelt kód natív (nem felügyelt) kódba hívható be, és rosszindulatú műveleteket hajt végre. Ha a kód típusa biztonságos, a futtatókörnyezet biztonsági kényszerítési mechanizmusa biztosítja, hogy csak akkor fér hozzá a natív kódhoz, ha erre engedéllyel rendelkezik. Az összes nem típusbiztos kódrészletnek rendelkeznie kell az átadott enumerációs taggal SecurityPermissionSkipVerification a futtatáshoz.
Megjegyzés
A Code Access Security (CAS) elavult a .NET-keretrendszer és a .NET összes verziójában. A .NET legújabb verziói nem tartják tiszteletben a CAS-megjegyzéseket, és cas-okkal kapcsolatos API-k használata esetén hibákat okoznak. A fejlesztőknek alternatív módot kell keresnie a biztonsági feladatok elvégzésére.
Vezető
Az azonosított fél a felhasználó identitását és szerepkörét képviseli, és a felhasználó nevében jár el. A .NET szerepkör-alapú biztonsága háromféle principal-t támogat:
Az általános tagok olyan felhasználókat és szerepköröket jelölnek, amelyek függetlenek a Windows felhasználóitól és szerepköreiétől.
A Windows-tagok a Windows-felhasználókat és a szerepköreiket (vagy azok Windows-csoportjait) képviselik. A Windows-felhasználó megszemélyesíthet egy másik felhasználót, ami azt jelenti, hogy a felhasználó hozzáférhet egy erőforráshoz egy másik felhasználó nevében, miközben az adott felhasználóhoz tartozó identitást jeleníti meg.
Az egyéni tagok az adott alkalmazáshoz szükséges módon bármilyen módon meghatározhatók. Kiterjeszthetik az igazgató identitásának és szerepeinek alapfogalmait.
További információ: Fő és identitás objektumok.
Hitelesítés
A hitelesítés az a folyamat, amely során egy entitás személyazonosságát fedezik fel és ellenőrzik a felhasználó hitelesítő adatainak vizsgálatával, és ezeket az adatokat egy hatósággal szemben igazolják. A hitelesítés során beszerzett információk közvetlenül felhasználhatók a kóddal. A .NET szerepköralapú biztonság használatával is hitelesítheti az aktuális használót, és meghatározhatja, hogy engedélyezi-e az adott biztonsági entitás számára a kód elérését. Tekintse meg a WindowsPrincipal.IsInRole metódus túlterheléseit, amelyek példákat nyújtanak arra, hogyan lehet hitelesíteni az aláírót adott szerepkörökhöz. A túlterheléssel WindowsPrincipal.IsInRole(String) például megállapíthatja, hogy az aktuális felhasználó tagja-e a Rendszergazdák csoportnak.
Ma számos hitelesítési mechanizmust használnak, amelyek közül sok a .NET szerepköralapú biztonságával használható. A leggyakrabban használt mechanizmusok egyike az alapszintű, a kivonatoló, a Passport, az operációs rendszer (például az NTLM vagy a Kerberos) vagy az alkalmazás által meghatározott mechanizmusok.
Példa
Az alábbi példa megköveteli, hogy az aktív tag rendszergazda legyen. A name
paraméter az null
, amely lehetővé teszi, hogy a rendszergazdai jogosultságú felhasználók teljesítsék az igényt.
Megjegyzés
Windows Vista rendszerben a felhasználói fiókok felügyelete (UAC) határozza meg a felhasználó jogosultságait. Ha Tagja a Beépített rendszergazdák csoportnak, két futásidejű hozzáférési jogkivonatot kap: egy standard felhasználói hozzáférési jogkivonatot és egy rendszergazdai hozzáférési jogkivonatot. Alapértelmezés szerint a szokásos felhasználói szerepkörben van. Ahhoz, hogy végrehajtsa azt a kódot, amely megköveteli, hogy rendszergazda legyen, először emelje a jogosultságokat a standard felhasználóról a rendszergazdai jogra. Ezt az alkalmazás indításakor megteheti úgy, hogy a jobb gombbal az alkalmazás ikonra kattint, és jelzi, hogy rendszergazdaként szeretne futni.
using System;
using System.Threading;
using System.Security.Permissions;
using System.Security.Principal;
class SecurityPrincipalDemo
{
public static void Main()
{
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
PrincipalPermission principalPerm = new PrincipalPermission(null, "Administrators");
principalPerm.Demand();
Console.WriteLine("Demand succeeded.");
}
}
Imports System.Threading
Imports System.Security.Permissions
Imports System.Security.Principal
Class SecurityPrincipalDemo
Public Shared Sub Main()
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
Dim principalPerm As New PrincipalPermission(Nothing, "Administrators")
principalPerm.Demand()
Console.WriteLine("Demand succeeded.")
End Sub
End Class
Az alábbi példa bemutatja, hogyan határozható meg az főszereplő identitása és az főszereplő számára elérhető szerepkörök. Ennek a példának az egyik alkalmazása lehet annak ellenőrzése, hogy az aktuális felhasználó olyan szerepkörben van-e, amelyet engedélyez az alkalmazás használatához.
using System;
using System.Threading;
using System.Security.Permissions;
using System.Security.Principal;
class SecurityPrincipalDemo
{
public static void DemonstrateWindowsBuiltInRoleEnum()
{
AppDomain myDomain = Thread.GetDomain();
myDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
WindowsPrincipal myPrincipal = (WindowsPrincipal)Thread.CurrentPrincipal;
Console.WriteLine($"{myPrincipal.Identity.Name.ToString()} belongs to: ");
Array wbirFields = Enum.GetValues(typeof(WindowsBuiltInRole));
foreach (object roleName in wbirFields)
{
try
{
// Cast the role name to a RID represented by the WindowsBuildInRole value.
Console.WriteLine($"{roleName}? {myPrincipal.IsInRole((WindowsBuiltInRole)roleName)}.");
Console.WriteLine("The RID for this role is: " + ((int)roleName).ToString());
}
catch (Exception)
{
Console.WriteLine($"{roleName}: Could not obtain role for this RID.");
}
}
// Get the role using the string value of the role.
Console.WriteLine($"'Administrators'? {myPrincipal.IsInRole("BUILTIN\\" + "Administrators")}.");
Console.WriteLine($"'Users'? {myPrincipal.IsInRole("BUILTIN\\" + "Users")}.");
// Get the role using the WindowsBuiltInRole enumeration value.
Console.WriteLine($"{WindowsBuiltInRole.Administrator}? {myPrincipal.IsInRole(WindowsBuiltInRole.Administrator)}.");
// Get the role using the WellKnownSidType.
SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
Console.WriteLine($"WellKnownSidType BuiltinAdministratorsSid {sid.Value}? {myPrincipal.IsInRole(sid)}.");
}
public static void Main()
{
DemonstrateWindowsBuiltInRoleEnum();
}
}
Imports System.Threading
Imports System.Security.Permissions
Imports System.Security.Principal
Class SecurityPrincipalDemo
Public Shared Sub DemonstrateWindowsBuiltInRoleEnum()
Dim myDomain As AppDomain = Thread.GetDomain()
myDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
Dim myPrincipal As WindowsPrincipal = CType(Thread.CurrentPrincipal, WindowsPrincipal)
Console.WriteLine("{0} belongs to: ", myPrincipal.Identity.Name.ToString())
Dim wbirFields As Array = [Enum].GetValues(GetType(WindowsBuiltInRole))
Dim roleName As Object
For Each roleName In wbirFields
Try
' Cast the role name to a RID represented by the WindowsBuildInRole value.
Console.WriteLine("{0}? {1}.", roleName, myPrincipal.IsInRole(CType(roleName, WindowsBuiltInRole)))
Console.WriteLine("The RID for this role is: " + Fix(roleName).ToString())
Catch
Console.WriteLine("{0}: Could not obtain role for this RID.", roleName)
End Try
Next roleName
' Get the role using the string value of the role.
Console.WriteLine("{0}? {1}.", "Administrators", myPrincipal.IsInRole("BUILTIN\" + "Administrators"))
Console.WriteLine("{0}? {1}.", "Users", myPrincipal.IsInRole("BUILTIN\" + "Users"))
' Get the role using the WindowsBuiltInRole enumeration value.
Console.WriteLine("{0}? {1}.", WindowsBuiltInRole.Administrator, myPrincipal.IsInRole(WindowsBuiltInRole.Administrator))
' Get the role using the WellKnownSidType.
Dim sid As New SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, Nothing)
Console.WriteLine("WellKnownSidType BuiltinAdministratorsSid {0}? {1}.", sid.Value, myPrincipal.IsInRole(sid))
End Sub
Public Shared Sub Main()
DemonstrateWindowsBuiltInRoleEnum()
End Sub
End Class
Engedélyezés
Az engedélyezés annak a folyamatnak a meghatározása, amely során eldől, hogy egy alany végrehajthat-e egy kért műveletet. Az engedélyezés a hitelesítés után történik, és a főszereplő identitására és szerepköreire vonatkozó információk alapján határozza meg, hogy a főszereplő milyen erőforrásokhoz férhet hozzá. A .NET szerepköralapú biztonság használatával implementálhatja az engedélyezést.