Dela via


XSLT-säkerhetsöverväganden

XSLT-språket har en omfattande uppsättning funktioner som ger dig stor kraft och flexibilitet. Den innehåller många funktioner som, även om de är användbara, också kan utnyttjas av externa källor. För att kunna använda XSLT på ett säkert sätt måste du förstå vilka typer av säkerhetsproblem som uppstår när du använder XSLT och de grundläggande strategier som du kan använda för att minska dessa risker.

XSLT-tillägg

Två populära XSLT-tillägg är formatmallsskript och tilläggsobjekt. Med dessa tillägg kan XSLT-processorn köra kod.

  • Tilläggsobjekt lägger till programmeringsfunktioner i XSL-transformeringar.

  • Skript kan bäddas in i formatmallen med hjälp av tilläggselementet msxsl:script .

Tilläggsobjekt

Tilläggsobjekt läggs till med hjälp av AddExtensionObject metoden . Behörighetsuppsättningen FullTrust krävs för att stödja tilläggsobjekt. Detta säkerställer att utökade behörigheter inte sker när tilläggsobjektkoden körs. Om du försöker anropa AddExtensionObject metoden utan FullTrust-behörigheter genereras ett säkerhetsfel.

Formatmallsskript

Skript kan bäddas in i en formatmall med hjälp av tilläggselementet msxsl:script . Skriptstöd är en valfri funktion i klassen XslCompiledTransform som är inaktiverad som standard. Skript kan aktiveras genom att ställa in XsltSettings.EnableScript egenskapen på true och skicka XsltSettings objektet till Load -metoden.

Kommentar

Skriptblock stöds endast i .NET Framework. De stöds inte på .NET Core eller .NET 5 eller senare.

Riktlinjer

Aktivera endast skript när formatmallen kommer från en betrodd källa. Om du inte kan verifiera formatmallens källa, eller om formatmallen inte kommer från en betrodd källa, skickar du in null för argumentet XSLT-inställningar.

Externa resurser

XSLT-språket har funktioner som xsl:import, xsl:includeeller document() funktionen, där processorn behöver matcha URI-referenser. Klassen XmlResolver används för att lösa externa resurser. Externa resurser kan behöva lösas i följande två fall:

Metoderna Load och Transform innehåller var och en överlagringar som accepterar ett XmlResolver av argumenten. Om en XmlResolver inte har angetts används ett standardvärde XmlUrlResolver utan autentiseringsuppgifter.

Riktlinjer

document() Aktivera funktionen endast när formatmallen kommer från en betrodd källa.

I följande lista beskrivs när du kanske vill ange ett XmlResolver objekt:

  • Om XSLT-processen behöver åtkomst till en nätverksresurs som kräver autentisering kan du använda en XmlResolver med nödvändiga autentiseringsuppgifter.

  • Om du vill begränsa de resurser som XSLT-processen kan komma åt kan du använda en XmlSecureResolver med rätt behörighetsuppsättning. XmlSecureResolver Använd klassen om du behöver öppna en resurs som du inte kontrollerar eller som inte är betrodd.

  • Om du vill anpassa beteendet kan du implementera din egen XmlResolver klass och använda den för att lösa resurser.

  • Om du vill se till att inga externa resurser används kan du ange null för XmlResolver argumentet.

Se även