CA3076: Nem biztonságos XSLT-szkript végrehajtása
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA3076 |
Cím | Nem biztonságos XSLT-szkript végrehajtása |
Kategória | Biztonság |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Nem |
Ok
Ha nem biztonságosan hajtja végre az Extensible Stylesheets Language Transformations (XSLT) szolgáltatást a .NET-alkalmazásokban, a processzor feloldhatja a nem megbízható URI-hivatkozásokat, amelyek bizalmas információkat tehetnek közzé a támadók számára, ami szolgáltatásmegtagadáshoz és helyek közötti támadásokhoz vezethet. További információ: XSLT biztonsági szempontok (.NET-útmutató).
Szabály leírása
Az XSLT egy World Wide Web Consortium (W3C) szabvány az XML-adatok átalakításához. Az XSLT-t általában stíluslapok írására használják, hogy az XML-adatokat más formátumokra, például HTML- vagy rögzített hosszúságú szöveggé, vesszővel tagolt szöveggé vagy más XML-formátumra alakítsa át. Bár alapértelmezés szerint tilos, dönthet úgy, hogy engedélyezi azt a projekt számára.
Annak érdekében, hogy ne tárjon fel támadási felületet, ez a szabály az XslCompiledTransform minden alkalommal aktiválódik.Load nem biztonságos kombinációs példányokat XsltSettingsXmlResolverfogad, amelyek rosszindulatú szkriptfeldolgozást tesz lehetővé.
Szabálysértések kijavítása
Cserélje le a nem biztonságos Xslt Gépház argumentumot az Xslt Gépház.Default vagy egy olyan példányra, amely letiltotta a dokumentumfüggvényeket és a szkriptek végrehajtását.
Cserélje le az XmlResolver argumentumot null értékűre vagy egy példányra XmlSecureResolver .
Mikor kell letiltani a figyelmeztetéseket?
Hacsak nem biztos abban, hogy a bemenet megbízható forrásból származik, ne tiltsa le a figyelmeztetés egyik szabályát sem.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA3076
// The code that's violating the rule is on this line.
#pragma warning restore CA3076
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA3076.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Példák pszeudokódokra
Xslt Gépház használó szabálysértés. TrustedXslt
using System.Xml;
using System.Xml.Xsl;
namespace TestNamespace
{
class TestClass
{
void TestMethod()
{
XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
var settings = XsltSettings.TrustedXslt;
var resolver = new XmlUrlResolver();
xslCompiledTransform.Load("testStylesheet", settings, resolver); // warn
}
}
}
Xslt Gépház-t használó megoldás. Alapértelmezett
using System.Xml;
using System.Xml.Xsl;
namespace TestNamespace
{
class TestClass
{
void TestMethod()
{
XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
var settings = XsltSettings.Default;
var resolver = new XmlUrlResolver();
xslCompiledTransform.Load("testStylesheet", settings, resolver);
}
}
}
Szabálysértés – a dokumentumfüggvény és a szkript végrehajtása nincs letiltva
using System.Xml;
using System.Xml.Xsl;
namespace TestNamespace
{
class TestClass
{
private static void TestMethod(XsltSettings settings)
{
try
{
XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
var resolver = new XmlUrlResolver();
xslCompiledTransform.Load("testStylesheet", settings, resolver); // warn
}
catch { throw; }
finally { }
}
}
}
Megoldás – a dokumentumfüggvény és a szkript végrehajtásának letiltása
using System.Xml;
using System.Xml.Xsl;
namespace TestNamespace
{
class TestClass
{
private static void TestMethod(XsltSettings settings)
{
try
{
XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
settings.EnableDocumentFunction = false;
settings.EnableScript = false;
var resolver = new XmlUrlResolver();
xslCompiledTransform.Load("testStylesheet", settings, resolver);
}
catch { throw; }
finally { }
}
}
}
Kapcsolódó információk
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: