Az XSLT biztonsági szempontjai
Az XSLT nyelv számos olyan funkcióval rendelkezik, amelyek nagy erőt és rugalmasságot biztosítanak. Számos olyan funkciót tartalmaz, amelyeket hasznosként külső források is kihasználhatnak. Az XSLT biztonságos használatához ismernie kell az XSLT használatakor felmerülő biztonsági problémák típusait, valamint azokat az alapvető stratégiákat, amelyeket a kockázatok enyhítésére alkalmazhat.
XSLT-bővítmények
Két népszerű XSLT-bővítmény a stíluslapszkript és a bővítményobjektum. Ezek a bővítmények lehetővé teszik az XSLT-processzor számára a kód végrehajtását.
A bővítményobjektumok programozási képességeket adnak hozzá az XSL-átalakításokhoz.
A szkriptek a bővítményelem használatával beágyazhatók a stíluslapba
msxsl:script
.
Bővítményobjektumok
A bővítményobjektumok a AddExtensionObject metódussal lesznek hozzáadva. A Bővítményobjektumok támogatásához a FullTrust engedélykészlet szükséges. Ez biztosítja, hogy az engedélyek emelése ne történjen meg a bővítményobjektum-kód végrehajtásakor. Ha FullTrust-engedélyek nélkül próbálja meghívni a AddExtensionObject metódust, az biztonsági kivételt eredményez.
Stíluslapszkriptek
A szkriptek a bővítményelem használatával beágyazhatók egy stíluslapba msxsl:script
. A szkriptek támogatása az osztály egyik választható funkciója XslCompiledTransform , amely alapértelmezés szerint le van tiltva. A szkriptek engedélyezéséhez állítsa be a tulajdonságottrue
, XsltSettings.EnableScript és adja át az XsltSettings objektumot a Load metódusnak.
Feljegyzés
A szkriptblokkok csak .NET-keretrendszer támogatottak. A .NET Core vagy a .NET 5 vagy újabb verziók nem támogatják őket.
Irányelvek
Csak akkor engedélyezze a szkriptelést, ha a stíluslap megbízható forrásból származik. Ha nem tudja ellenőrizni a stíluslap forrását, vagy ha a stíluslap nem megbízható forrásból származik, adja meg null
az XSLT-beállítások argumentumát.
Külső erőforrások
Az XSLT nyelv olyan funkciókkal rendelkezik, mint xsl:import
az , xsl:include
vagy a document()
függvény, ahol a processzornak fel kell oldania az URI-hivatkozásokat. Az XmlResolver osztály a külső erőforrások feloldására szolgál. Előfordulhat, hogy a külső erőforrásokat a következő két esetben kell megoldani:
Stíluslap összeállításakor a rendszer ezt XmlResolver használja
xsl:import
ésxsl:include
feloldja.Az átalakítás végrehajtásakor a XmlResolver függvény feloldása
document()
történik.Feljegyzés
A
document()
függvény alapértelmezés szerint le van tiltva az XslCompiledTransform osztályban. Ez a funkció engedélyezhető úgy, hogytrue
beállítja a XsltSettings.EnableDocumentFunction tulajdonságot, és átadja az XsltSettings objektumot a Load metódusnak.
Transform Az Load egyes metódusok közé tartoznak a túlterhelések, amelyek egy argumentumot fogadnak elXmlResolver. Ha nincs megadva, XmlResolver a rendszer egy hitelesítő adatok nélküli alapértelmezett XmlUrlResolver beállítást használ.
Irányelvek
Csak akkor engedélyezze a document()
függvényt, ha a stíluslap megbízható forrásból származik.
Az alábbi lista azt ismerteti, hogy mikor érdemes megadni egy objektumot XmlResolver :
Ha az XSLT-folyamatnak egy hitelesítést igénylő hálózati erőforráshoz kell hozzáférnie, használhatja XmlResolver a szükséges hitelesítő adatokat.
Ha korlátozni szeretné az XSLT-folyamat által elérhető erőforrásokat, használhatja XmlSecureResolver a megfelelő engedélykészletet. Használja az XmlSecureResolver osztályt, ha olyan erőforrást kell megnyitnia, amelyet nem szabályoz, vagy amely nem megbízható.
Ha testre szeretné szabni a viselkedést, implementálhatja saját XmlResolver osztályát, és felhasználhatja az erőforrások megoldására.
Ha meg szeretné győződni arról, hogy nem fér hozzá külső erőforrásokhoz, megadhatja
null
az XmlResolver argumentumot.