Bagikan melalui


SYSLIB0003: Keamanan akses kode tidak didukung

Keamanan akses kode (CAS) adalah teknologi warisan yang tidak didukung. Infrastruktur untuk mengaktifkan CAS, yang hanya ada di .NET Framework 2.x - 4.x, tidak digunakan lagi dan tidak menerima layanan atau perbaikan keamanan.

Akibatnya, sebagian besar jenis terkait keamanan akses kode (CAS) di .NET usang, mulai dari .NET 5. Ini termasuk atribut CAS, seperti SecurityPermissionAttribute, objek izin CAS, seperti SocketPermission, EvidenceBasejenis turunan, dan API pendukung lainnya. Menggunakan API ini menghasilkan peringatan SYSLIB0003 pada waktu kompilasi.

Daftar lengkap API CAS usang adalah sebagai berikut:

Penyelesaian masalah

  • Jika Anda menegaskan izin keamanan apa pun, hapus atribut atau panggilan yang menegaskan izin.

    // REMOVE the attribute below.
    [SecurityPermission(SecurityAction.Assert, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoAssert()
    {
        // REMOVE the line below.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert();
    }
    
  • Jika Anda menolak atau membatasi (melalui PermitOnly) izin apa pun, hubungi penasihat keamanan Anda. Karena atribut CAS tidak dihormati oleh runtime .NET 5+, aplikasi Anda bisa memiliki lubang keamanan jika salah bergantung pada infrastruktur CAS untuk membatasi akses ke metode ini.

    // 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();
    }
    
  • Jika Anda menuntut izin apa pun (kecuali PrincipalPermission), hapus permintaan. Semua tuntutan akan berhasil pada waktu proses.

    // 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();
    }
    
  • Jika Anda menuntut PrincipalPermission, konsultasikan panduan untuk SYSLIB0002: PrincipalPermissionAttribute sudah kedaluwarsa. Panduan itu berlaku untuk PrincipalPermission dan PrincipalPermissionAttribute.

Menyembunyikan peringatan

Jika Anda harus menggunakan API usang, Anda dapat menekan peringatan dalam kode atau dalam file proyek Anda.

Untuk menekan hanya satu pelanggaran, tambahkan direktif praprosedur ke file sumber Anda untuk menonaktifkan lalu mengaktifkan kembali peringatan.

// Disable the warning.
#pragma warning disable SYSLIB0003

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0003

Untuk menekan semua SYSLIB0003 peringatan dalam proyek Anda, tambahkan <NoWarn> properti ke file proyek Anda.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0003</NoWarn>
  </PropertyGroup>
</Project>

Untuk informasi selengkapnya, lihat Menyembunyikan peringatan.

Lihat juga