CA3076: Esecuzione di script XSLT non protetta
Proprietà | valore |
---|---|
ID regola | CA3076 |
Titolo | Esecuzione di script XSLT non protetta |
Categoria | Sicurezza |
Correzione che causa un'interruzione o un'interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 8 | No |
Causa
Se si esegue Extensible Stylesheets Language Transformations (XSLT) in applicazioni .NET in modo non protetto, il processore può risolvere i riferimenti URI non attendibili che potrebbero divulgare informazioni riservate a utenti malintenzionati causando attacchi Denial of Service e XSS. Per altre informazioni, vedere Considerazioni sulla sicurezza XSLT (Guida a .NET).
Descrizione regola
XSLT è uno standard W3C (World Wide Web Consortium) per la trasformazione dei dati XML. XSLT viene in genere usato per scrivere fogli di stile per trasformare i dati XML in altri formati, ad esempio HTML, testo a lunghezza fissa, testo delimitato da virgole o un formato XML diverso. Sebbene non sia consentito per impostazione predefinita, è possibile scegliere di abilitarlo per un progetto.
Per garantire di non esporre una superficie di attacco, questa regola viene attivata ogni volta che XslCompiledTransform.Load riceve una combinazione non protetta di istanze di XsltSettings e XmlResolver, che consente l'elaborazione di script dannosi.
Come correggere le violazioni
Sostituire l'argomento XsltSettings non protetto con XsltSettings.Default o con un'istanza che ha disabilitato l'esecuzione di script e funzioni del documento.
Sostituire l'argomento XmlResolver con Null o con un'istanza di XmlSecureResolver .
Quando eliminare gli avvisi
A meno che non si abbia la certezza che l'input provenga da un'origine attendibile, non escludere una regola da questo avviso.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA3076
// The code that's violating the rule is on this line.
#pragma warning restore CA3076
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA3076.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
Violazione che usa Xslt Impostazioni. 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
}
}
}
Soluzione che usa Xslt Impostazioni. Predefinito
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);
}
}
}
Violazione: la funzione del documento e l'esecuzione dello script non sono disabilitate
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 { }
}
}
}
Soluzione: disabilitare la funzione del documento e l'esecuzione di script
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 { }
}
}
}