Kod erişimi güvenlik API'lerinin çoğu kullanımdan kaldırıldı
.NET'teki kod erişim güvenliği (CAS) ile ilgili türlerin çoğu artık uyarı olarak kullanılmıyor. Buna, SecurityPermissionAttribute, - türetilmiş türler ve diğer destekleyici API'ler gibi , EvidenceBaseCAS izin nesneleri gibi SocketPermissionCAS öznitelikleri dahildir.
Açıklama değiştirildi
.NET Framework 2.x - 4.x'te CAS öznitelikleri ve API'leri, CAS talep yığınının başarılı veya başarısız olmasını sağlamak da dahil olmak üzere kod yürütmenin seyrini etkileyebilir.
// In .NET Framework, the attribute causes CAS stack walks
// to terminate successfully when this permission is demanded.
[SocketPermission(SecurityAction.Assert, Host = "contoso.com", Port = "443")]
public void DoSomething()
{
// open a socket to contoso.com:443
}
.NET Core 2.x - 3.x'te çalışma zamanı CAS özniteliklerini veya CAS API'lerini dikkate almaz. Çalışma zamanı, yöntem girdisi üzerindeki öznitelikleri yoksayar ve çoğu programlı API'nin hiçbir etkisi yoktur.
// The .NET Core runtime ignores the following attribute.
[SocketPermission(SecurityAction.Assert, Host = "contoso.com", Port = "443")]
public void DoSomething()
{
// open a socket to contoso.com:443
}
Buna ek olarak, geniş API'lere (Assert
) yönelik programlı çağrılar her zaman başarılı olurken, kısıtlayıcı API'lere (Deny
, PermitOnly
) yapılan programlı çağrılar her zaman çalışma zamanında bir özel durum oluşturur. (PrincipalPermission bu kural için bir özel durumdur. Aşağıdaki Önerilen eylem bölümüne bakın.)
public void DoAssert()
{
// The line below has no effect at run time.
new SocketPermission(PermissionState.Unrestricted).Assert();
}
public void DoDeny()
{
// The line below throws PlatformNotSupportedException at run time.
new SocketPermission(PermissionState.Unrestricted).Deny();
}
.NET 5 ve sonraki sürümlerinde CAS ile ilgili çoğu API eskidir ve derleme zamanı uyarısı SYSLIB0003
üretir.
[SocketPermission(SecurityAction.Assert, Host = "contoso.com", Port = "443")] // warning SYSLIB0003
public void DoSomething()
{
new SocketPermission(PermissionState.Unrestricted).Assert(); // warning SYSLIB0003
new SocketPermission(PermissionState.Unrestricted).Deny(); // warning SYSLIB0003
}
Bu yalnızca derleme zamanı değişikliğidir. .NET Core'un önceki sürümlerinde çalışma zamanı değişikliği yoktur. .NET Core 2.x - 3.x sürümlerinde hiçbir işlem gerçekleştirmez yöntemler.NET 5 ve sonraki sürümlerde çalışma zamanında hiçbir işlem gerçekleştirmeye devam eder. .NET Core 2.x - 3.x'te oluşturan PlatformNotSupportedException yöntemler.NET 5 ve sonraki sürümlerde çalışma zamanında atmaya PlatformNotSupportedException devam eder.
Değişiklik nedeni
Kod erişim güvenliği (CAS), desteklenmeyen eski bir teknolojidir. CAS'yi etkinleştirme altyapısı yalnızca .NET Framework 2.x - 4.x'te bulunur, ancak kullanım dışıdır ve bakım veya güvenlik düzeltmeleri almaz.
CAS'nin kullanımdan kaldırılması nedeniyle destekleyici altyapı .NET Core veya .NET 5+ için öne çıkarılmamıştı. Ancak, uygulamaların .NET Framework ve .NET Core ile çapraz derlemesi için API'ler öne çıkarıldı. Bu, CAS ile ilgili bazı API'lerin mevcut olduğu ve çağrılabileceği ancak çalışma zamanında hiçbir işlem gerçekleştirmediği "başarısız açma" senaryolarına yol açtı. Bu, çalışma zamanının CAS ile ilgili özniteliklere veya programlı API çağrılarına uygun olmasını bekleyen bileşenler için güvenlik sorunlarına yol açabilir. Çalışma zamanının bu özniteliklere veya API'lere saygı duymadığını daha iyi bildirmek için, bunların çoğunu .NET 5.0'da gizledik.
Sürüm kullanıma sunulmuştur
5.0
Önerilen eylem
Herhangi bir güvenlik iznini onaylarsanız, izni onaylayan özniteliği veya çağrıyı kaldırın.
// REMOVE the attribute below. [SecurityPermission(SecurityAction.Assert, ControlThread = true)] public void DoSomething() { } public void DoAssert() { // REMOVE the line below. new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert(); }
Herhangi bir izni reddediyor veya kısıtlıyorsanız (aracılığıyla
PermitOnly
) güvenlik danışmanınıza başvurun. CAS öznitelikleri .NET 5+ çalışma zamanı tarafından kabul edilmediğinden, uygulamanızın bu yöntemlere erişimi kısıtlamak için YANLıŞLıKLA CAS altyapısına bağlı olması durumunda bir güvenlik deliği olabilir.// REVIEW the attribute below; could indicate security vulnerability. [SecurityPermission(SecurityAction.Deny, ControlThread = true)] public void DoSomething() { } public void DoPermitOnly() { // REVIEW the line below; could indicate security vulnerability. new SecurityPermission(SecurityPermissionFlag.ControlThread).PermitOnly(); }
herhangi bir izin (hariç) PrincipalPermissiontalep ediyorsanız talebi kaldırın. Tüm talepler çalışma zamanında başarılı olur.
// REMOVE the attribute below; it will always succeed. [SecurityPermission(SecurityAction.Demand, ControlThread = true)] public void DoSomething() { } public void DoDemand() { // REMOVE the line below; it will always succeed. new SecurityPermission(SecurityPermissionFlag.ControlThread).Demand(); }
talep ediyorsanız PrincipalPermissionPrincipalPermissionAttribute hata olarak kullanımdan kaldırıldı yönergelerine başvurun. Bu kılavuz hem hem PrincipalPermissionAttributede PrincipalPermission için geçerlidir.
Bu uyarıları kesinlikle devre dışı bırakmanız gerekiyorsa (önerilmez), uyarıyı
SYSLIB0003
kodda gizleyebilirsiniz.#pragma warning disable SYSLIB0003 // disable the warning [SecurityPermission(SecurityAction.Demand, ControlThread = true)] #pragma warning restore SYSLIB0003 // re-enable the warning public void DoSomething() { } public void DoDemand() { #pragma warning disable SYSLIB0003 // disable the warning new SecurityPermission(SecurityPermissionFlag.ControlThread).Demand(); #pragma warning restore SYSLIB0003 // re-enable the warning }
Uyarıyı proje dosyanızda da gizleyebilirsiniz. Bunun yapılması, projedeki tüm kaynak dosyalar için uyarıyı devre dışı bırakır.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- NoWarn below suppresses SYSLIB0003 project-wide --> <NoWarn>$(NoWarn);SYSLIB0003</NoWarn> </PropertyGroup> </Project>
Not
Gizlenmesi
SYSLIB0003
yalnızca CAS ile ilgili kullanımdan kaldırma uyarılarını devre dışı bırakır. Diğer uyarıları devre dışı bırakmaz veya .NET 5+ çalışma zamanının davranışını değiştirmez.Güvenlik
Etkilenen API’ler
- System.AppDomain.PermissionSet
- System.Configuration.ConfigurationPermission
- System.Configuration.ConfigurationPermissionAttribute
- System.Data.Common.DBDataPermission
- System.Data.Common.DBDataPermissionAttribute
- System.Data.Odbc.OdbcPermission
- System.Data.Odbc.OdbcPermissionAttribute
- System.Data.OleDb.OleDbPermission
- System.Data.OleDb.OleDbPermissionAttribute
- System.Data.OracleClient.OraclePermission
- System.Data.OracleClient.OraclePermissionAttribute
- System.Data.SqlClient.SqlClientPermission
- System.Data.SqlClient.SqlClientPermissionAttribute
- System.Diagnostics.EventLogPermission
- System.Diagnostics.EventLogPermissionAttribute
- System.Diagnostics.PerformanceCounterPermission
- System.Diagnostics.PerformanceCounterPermissionAttribute
- System.DirectoryServices.DirectoryServicesPermission
- System.DirectoryServices.DirectoryServicesPermissionAttribute
- System.Drawing.Printing.PrintingPermission
- System.Drawing.Printing.PrintingPermissionAttribute
- System.Net.DnsPermission
- System.Net.DnsPermissionAttribute
- System.Net.Mail.SmtpPermission
- System.Net.Mail.SmtpPermissionAttribute
- System.Net.NetworkInformation.NetworkInformationPermission
- System.Net.NetworkInformation.NetworkInformationPermissionAttribute
- System.Net.PeerToPeer.Collaboration.PeerCollaborationPermission
- System.Net.PeerToPeer.Collaboration.PeerCollaborationPermissionAttribute
- System.Net.PeerToPeer.PnrpPermission
- System.Net.PeerToPeer.PnrpPermissionAttribute
- System.Net.SocketPermission
- System.Net.SocketPermissionAttribute
- System.Net.WebPermission
- System.Net.WebPermissionAttribute
- System.Runtime.InteropServices.AllowReversePInvokeCallsAttribute
- System.Security.CodeAccessPermission
- System.Security.HostProtectionException
- System.Security.IPermission
- System.Security.IStackWalk
- System.Security.NamedPermissionSet
- System.Security.PermissionSet
- System.Security.Permissions.CodeAccessSecurityAttribute
- System.Security.Permissions.DataProtectionPermission
- System.Security.Permissions.DataProtectionPermissionAttribute
- System.Security.Permissions.DataProtectionPermissionFlags
- System.Security.Permissions.EnvironmentPermission
- System.Security.Permissions.EnvironmentPermissionAccess
- System.Security.Permissions.EnvironmentPermissionAttribute
- System.Security.Permissions.FileDialogPermission
- System.Security.Permissions.FileDialogPermissionAccess
- System.Security.Permissions.FileDialogPermissionAttribute
- System.Security.Permissions.FileIOPermission
- System.Security.Permissions.FileIOPermissionAccess
- System.Security.Permissions.FileIOPermissionAttribute
- System.Security.Permissions.GacIdentityPermission
- System.Security.Permissions.GacIdentityPermissionAttribute
- System.Security.Permissions.HostProtectionAttribute
- System.Security.Permissions.HostProtectionResource
- System.Security.Permissions.IUnrestrictedPermission
- System.Security.Permissions.IsolatedStorageContainment
- System.Security.Permissions.IsolatedStorageFilePermission
- System.Security.Permissions.IsolatedStorageFilePermissionAttribute
- System.Security.Permissions.IsolatedStoragePermission
- System.Security.Permissions.IsolatedStoragePermissionAttribute
- System.Security.Permissions.KeyContainerPermission
- System.Security.Permissions.KeyContainerPermissionAccessEntry
- System.Security.Permissions.KeyContainerPermissionAccessEntryCollection
- System.Security.Permissions.KeyContainerPermissionAccessEntryEnumerator
- System.Security.Permissions.KeyContainerPermissionAttribute
- System.Security.Permissions.KeyContainerPermissionFlags
- System.Security.Permissions.MediaPermission
- System.Security.Permissions.MediaPermissionAttribute
- System.Security.Permissions.MediaPermissionAudio
- System.Security.Permissions.MediaPermissionImage
- System.Security.Permissions.MediaPermissionVideo
- System.Security.Permissions.PermissionSetAttribute
- System.Security.Permissions.PermissionState
- System.Security.Permissions.PrincipalPermission
- System.Security.Permissions.PrincipalPermissionAttribute
- System.Security.Permissions.PublisherIdentityPermission
- System.Security.Permissions.PublisherIdentityPermissionAttribute
- System.Security.Permissions.ReflectionPermission
- System.Security.Permissions.ReflectionPermissionAttribute
- System.Security.Permissions.ReflectionPermissionFlag
- System.Security.Permissions.RegistryPermission
- System.Security.Permissions.RegistryPermissionAccess
- System.Security.Permissions.RegistryPermissionAttribute
- System.Security.Permissions.ResourcePermissionBase
- System.Security.Permissions.ResourcePermissionBaseEntry
- System.Security.Permissions.SecurityAction
- System.Security.Permissions.SecurityAttribute
- System.Security.Permissions.SecurityPermission
- System.Security.Permissions.SecurityPermissionAttribute
- System.Security.Permissions.SecurityPermissionFlag
- System.Security.Permissions.SiteIdentityPermission
- System.Security.Permissions.SiteIdentityPermissionAttribute
- System.Security.Permissions.StorePermission
- System.Security.Permissions.StorePermissionAttribute
- System.Security.Permissions.StorePermissionFlags
- System.Security.Permissions.StrongNameIdentityPermission
- System.Security.Permissions.StrongNameIdentityPermissionAttribute
- System.Security.Permissions.StrongNamePublicKeyBlob
- System.Security.Permissions.TypeDescriptorPermission
- System.Security.Permissions.TypeDescriptorPermissionAttribute
- System.Security.Permissions.TypeDescriptorPermissionFlags
- System.Security.Permissions.UIPermission
- System.Security.Permissions.UIPermissionAttribute
- System.Security.Permissions.UIPermissionClipboard
- System.Security.Permissions.UIPermissionWindow
- System.Security.Permissions.UrlIdentityPermission
- System.Security.Permissions.UrlIdentityPermissionAttribute
- System.Security.Permissions.WebBrowserPermission
- System.Security.Permissions.WebBrowserPermissionAttribute
- System.Security.Permissions.WebBrowserPermissionLevel
- System.Security.Permissions.ZoneIdentityPermission
- System.Security.Permissions.ZoneIdentityPermissionAttribute
- System.Security.Policy.ApplicationTrust.ApplicationTrust(PermissionSet, IEnumerable<StrongName>)
- System.Security.Policy.ApplicationTrust.FullTrustAssemblies
- System.Security.Policy.FileCodeGroup
- System.Security.Policy.GacInstalled
- System.Security.Policy.IIdentityPermissionFactory
- System.Security.Policy.PolicyLevel.AddNamedPermissionSet(NamedPermissionSet)
- System.Security.Policy.PolicyLevel.ChangeNamedPermissionSet(String, PermissionSet)
- System.Security.Policy.PolicyLevel.GetNamedPermissionSet(String)
- System.Security.Policy.PolicyLevel.RemoveNamedPermissionSet
- System.Security.Policy.PolicyStatement.PermissionSet
- System.Security.Policy.PolicyStatement.PolicyStatement
- System.Security.Policy.Publisher
- System.Security.Policy.Site
- System.Security.Policy.StrongName
- System.Security.Policy.StrongNameMembershipCondition
- System.Security.Policy.Url
- System.Security.Policy.Zone
- System.Security.SecurityManager
- System.ServiceProcess.ServiceControllerPermission
- System.ServiceProcess.ServiceControllerPermissionAttribute
- System.Transactions.DistributedTransactionPermission
- System.Transactions.DistributedTransactionPermissionAttribute
- System.Web.AspNetHostingPermission
- System.Web.AspNetHostingPermissionAttribute
- System.Xaml.Permissions.XamlLoadPermission