Bagikan melalui


Kelas System.Xml.XmlSecureResolver

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Kelas XmlUrlResolver adalah resolver default untuk semua kelas di System.Xml namespace. Ini digunakan untuk memuat dokumen XML dan untuk menyelesaikan sumber daya eksternal seperti entitas, DTD atau skema, dan mengimpor atau menyertakan arahan.

Anda dapat mengesampingkan default ini dengan menentukan objek yang akan digunakan XmlResolver. Misalnya, jika Anda ingin membatasi sumber daya yang dapat diakses oleh yang mendasar XmlResolver , Anda dapat menggunakan XmlSecureResolver objek.

XmlSecureResolver membungkus implementasi XmlResolver konkret dan membatasi sumber daya yang dapat diakses oleh yang mendasarnya XmlResolver . Misalnya, XmlSecureResolver memiliki kemampuan untuk melarang pengalihan lintas domain, yang terjadi dari referensi Pengidentifikasi Sumber Daya Seragam (URI) yang disematkan.

Saat membuat XmlSecureResolver objek, Anda memberikan implementasi XmlResolver yang valid bersama dengan URL, contoh objek bukti, atau kumpulan izin, yang digunakan oleh XmlSecureResolver untuk menentukan keamanan. Baik System.Security.PermissionSet yang dihasilkan atau yang sudah ada digunakan dan PermissionSet.PermitOnly dipanggil padanya untuk membantu mengamankan XmlResolver yang mendasarinya.

Penting

XmlSecureResolver objek dapat berisi informasi sensitif seperti kredensial pengguna. Berhati-hatilah ketika melakukan penembolokan terhadap objek XmlSecureResolver dan hindari meneruskan objek XmlSecureResolver ke komponen yang tidak tepercaya.

Penting

Ada perbedaan dalam infrastruktur keamanan untuk kode yang berjalan pada runtime bahasa umum .NET (CLR) dan untuk kode yang berjalan pada CLR yang terintegrasi dalam Microsoft SQL Server 2005. Ini dapat menyebabkan kasus di mana kode yang dikembangkan untuk .NET CLR beroperasi secara berbeda ketika digunakan pada CLR terintegrasi SQL Server. Salah satu perbedaan ini memengaruhi kelas XmlSecureResolver ketika Anda memiliki bukti yang didasarkan pada URL (yaitu, ketika Anda menggunakan metode CreateEvidenceForUrl(String) atau konstruktor XmlSecureResolver). Mekanisme resolusi kebijakan dari CLR terintegrasi SQL Server tidak menggunakan informasi Url atau Zone. Sebaliknya, ia memberikan izin berdasarkan GUID yang ditambahkan server saat assembly dimuat. Ketika Anda menggunakan XmlSecureResolver di CLR terintegrasi SQL Server, berikan bukti yang diperlukan secara langsung dengan menggunakan PermissionSet.

Untuk menggunakan resolver aman

  1. Buat XmlSecureResolver dengan set izin yang benar.

  2. Buat objek XmlReaderSettings yang memanfaatkan objek XmlSecureResolver.

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver = myResolver;
    
    Dim settings As New XmlReaderSettings()
    settings.XmlResolver = myResolver
    
  3. Berikan objek XmlReaderSettings ke metode Create ketika Anda membuat objek XmlReader.

    XmlReader reader = XmlReader.Create("books.xml", settings);
    
    Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
    

Untuk membatasi akses dengan menggunakan URL

XmlSecureResolver(XmlResolver, String) Gunakan konstruktor untuk membuat XmlSecureResolver objek yang diizinkan untuk mengakses situs intranet lokal Anda saja.

XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), "http://myLocalSite/");
Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), "http://myLocalSite/")

Untuk membatasi akses dengan menggunakan set izin

  1. Buat objek WebPermission.

    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
    Dim myWebPermission As New WebPermission(PermissionState.None)
    
  2. Tentukan URL yang ingin Anda izinkan aksesnya.

    myWebPermission.AddPermission(NetworkAccess.Connect, "http://www.contoso.com/");
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://litwareinc.com/data/");
    
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://www.contoso.com/")
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://litwareinc.com/data/")
    
  3. Tambahkan izin web ke PermissionSet objek.

    PermissionSet myPermissions = new PermissionSet(PermissionState.None);
    myPermissions.AddPermission(myWebPermission);
    
    Dim myPermissions As New PermissionSet(PermissionState.None)
    myPermissions.AddPermission(myWebPermission)
    
  4. Gunakan konstruktor XmlSecureResolver(XmlResolver, PermissionSet) untuk membuat objek XmlSecureResolver dengan menggunakan set izin.

    XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myPermissions);
    
    Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myPermissions)
    

    XmlSecureResolver Lihat halaman referensi untuk contoh lain.

Untuk membatasi akses dengan menggunakan bukti

Anda dapat membatasi akses dengan menggunakan XmlSecureResolver(XmlResolver, Evidence) konstruktor dan menentukan Evidence. Evidence digunakan untuk membuat PermissionSet yang diterapkan ke XmlResolver mendasar. XmlSecureResolver memanggil PermitOnly pada PermissionSet yang telah dibuat sebelum membuka sumber daya apa pun.

Berikut adalah beberapa skenario umum dan jenis bukti yang harus disediakan untuk masing-masing:

  • Jika Anda bekerja di lingkungan yang sepenuhnya tepercaya, gunakan rakitan Anda untuk menciptakan bukti.

    Evidence myEvidence = this.GetType().Assembly.Evidence;
    XmlSecureResolver myResolver;
    myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
    
    Dim myEvidence As Evidence = Me.GetType().Assembly.Evidence
    Dim myResolver As XmlSecureResolver
    myResolver = New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
    
  • Jika Anda bekerja di lingkungan semi-tepercaya, Anda memiliki kode atau data yang berasal dari sumber luar, dan Anda tahu asal sumber luar dan memiliki URI yang dapat diverifikasi, gunakan URI untuk membuat bukti:

    
    Evidence myEvidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI);
    XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
    
    Dim myEvidence As Evidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI)
    Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
    
  • Jika Anda bekerja di lingkungan yang semi-tepercaya dan Anda memiliki kode atau data yang berasal dari sumber luar, tetapi Anda tidak tahu dari mana asal sumber luar tersebut.

    Atur parameter evidence ke null. Ini memungkinkan tidak ada akses ke sumber daya.

    -atau-

    Jika aplikasi Anda memerlukan beberapa akses ke sumber daya, minta bukti dari pemanggil.

Untuk menggunakan resolver aman untuk memuat lembar gaya XSLT

  1. Buat XmlSecureResolver dengan set izin yang benar.

  2. Teruskan metode XmlSecureResolver ke Load.

    XslCompiledTransform xslt = new XslCompiledTransform();
    xslt.Load("http://serverName/data/xsl/sort.xsl", null, myResolver);
    
    Dim xslt As New XslCompiledTransform()
    xslt.Load("http://serverName/data/xsl/sort.xsl", Nothing, myResolver)