Delen via


Overwegingen voor XSLT-beveiliging

De XSLT-taal heeft een uitgebreide set functies die u veel kracht en flexibiliteit bieden. Het bevat veel functies die, hoewel nuttig, ook door externe bronnen kunnen worden misbruikt. Als u XSLT veilig wilt gebruiken, moet u de typen beveiligingsproblemen begrijpen die zich voordoen bij het gebruik van XSLT en de basisstrategieën die u kunt gebruiken om deze risico's te beperken.

XSLT-extensies

Twee populaire XSLT-extensies zijn opmaakmodelscripts en extensieobjecten. Met deze extensies kan de XSLT-processor code uitvoeren.

  • Extensieobjecten voegen programmeermogelijkheden toe aan XSL-transformaties.

  • Scripts kunnen worden ingesloten in het opmaakmodel met behulp van het msxsl:script extensie-element.

Extensieobjecten

Extensieobjecten worden toegevoegd met behulp van de AddExtensionObject methode. De machtigingenset FullTrust is vereist voor de ondersteuning van extensieobjecten. Dit zorgt ervoor dat uitbreiding van machtigingen niet plaatsvindt wanneer de extensieobjectcode wordt uitgevoerd. Als u de AddExtensionObject methode probeert aan te roepen zonder FullTrust-machtigingen, wordt er een beveiligingsonderzondering gegenereerd.

Opmaakmodelscripts

Scripts kunnen worden ingesloten in een opmaakmodel met behulp van het msxsl:script extensie-element. Scriptondersteuning is een optionele functie voor de XslCompiledTransform klasse die standaard is uitgeschakeld. Scripting kan worden ingeschakeld door de XsltSettings.EnableScript eigenschap in te true stellen op en het XsltSettings object door te geven aan de Load methode.

Notitie

Scriptblokken worden alleen ondersteund in .NET Framework. Ze worden niet ondersteund op .NET Core of .NET 5 of hoger.

Richtlijnen

Schakel scripting alleen in wanneer het opmaakmodel afkomstig is van een vertrouwde bron. Als u de bron van het opmaakmodel niet kunt controleren of als het opmaakmodel niet afkomstig is van een vertrouwde bron, geeft null u het argument XSLT-instellingen door.

Externe resources

De XSLT-taal heeft functies zoals xsl:import, xsl:includeof de document() functie, waarbij de processor URI-verwijzingen moet oplossen. De XmlResolver klasse wordt gebruikt om externe resources op te lossen. In de volgende twee gevallen moeten externe resources mogelijk worden opgelost:

  • Bij het compileren van een opmaakmodel wordt het gebruikt voor xsl:import en xsl:include de XmlResolver resolutie.

  • Bij het uitvoeren van de transformatie wordt de XmlResolver functie gebruikt om de document() functie op te lossen.

    Notitie

    De document() functie is standaard uitgeschakeld voor de XslCompiledTransform klasse. Deze functie kan worden ingeschakeld door de XsltSettings.EnableDocumentFunction eigenschap in te true stellen op en het XsltSettings object door te geven aan de Load methode.

De Load en Transform methoden bevatten allemaal overbelastingen die een XmlResolver als een van de argumenten accepteren. Als er XmlResolver geen referenties zijn opgegeven, wordt standaard geen XmlUrlResolver referenties gebruikt.

Richtlijnen

Schakel de document() functie alleen in wanneer het opmaakmodel afkomstig is van een vertrouwde bron.

In de volgende lijst wordt beschreven wanneer u mogelijk een XmlResolver object wilt opgeven:

  • Als het XSLT-proces toegang nodig heeft tot een netwerkresource waarvoor verificatie is vereist, kunt u een XmlResolver met de benodigde referenties gebruiken.

  • Als u de resources wilt beperken waartoe het XSLT-proces toegang heeft, kunt u een XmlSecureResolver met de juiste machtigingenset gebruiken. Gebruik de XmlSecureResolver klasse als u een resource wilt openen die u niet bepaalt of die niet wordt vertrouwd.

  • Als u het gedrag wilt aanpassen, kunt u uw eigen XmlResolver klasse implementeren en deze gebruiken om resources op te lossen.

  • Als u ervoor wilt zorgen dat er geen externe resources worden geopend, kunt u opgeven null voor het XmlResolver argument.

Zie ook