Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA5371 |
| Název | Použít XmlReader pro čtení schématu |
| Kategorie | Zabezpečení |
| Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
| Povoleno ve výchozím nastavení v .NET 10 | No |
Příčina
Zpracování nedůvěryhodného vstupu XML s XmlSchema.Read instancí bez objektu XmlReader může potenciálně vést k útoku na odepření služby, zpřístupnění informací a útoků na požadavek na straně serveru. Tyto útoky jsou povoleny nedůvěryhodným zpracováním schématU DTD a XML, což umožňuje zahrnutí bomb XML a škodlivých externích entit do XML. DTD je možné zakázat pouze s XmlReader použitím. Zpracování schématu XML inline, jako XmlReader, má vlastnosti ProhibitDtd a ProcessInlineSchema nastaveny na "false" ve výchozím nastavení v .NET Framework od verze 4.0. Další možnosti, jako Streamje například , TextReadera XmlSerializationReader nelze zakázat zpracování DTD.
Popis pravidla
Zpracování nedůvěryhodných schémat DTD a XML může povolit načítání nebezpečných externích odkazů.
XmlReader Použití se zabezpečeným překladačem nebo se zakázaným zpracováním vloženého schématu DTD a XML to omezuje. Toto pravidlo detekuje kód, který používá metodu XmlSchema.Read bez XmlReader parametru.
Jak opravit porušení
Použijte XmlSchema.Read(XmlReader, *) přetížení.
Kdy potlačit upozornění
Toto upozornění můžete potenciálně potlačit, pokud XmlSchema.Read se metoda vždy používá ke zpracování XML pocházejícího z důvěryhodného zdroje, a proto nelze manipulovat s.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA5371
// The code that's violating the rule is on this line.
#pragma warning restore CA5371
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA5371.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Příklady pseudokódu
Porušení
Následující ukázka pseudokódu znázorňuje vzor zjištěný tímto pravidlem.
Typ prvního parametru XmlSchema.Read není XmlReader.
using System.IO;
using System.Xml.Schema;
...
public void TestMethod(Stream stream, ValidationEventHandler validationEventHandler)
{
XmlSchema.Read(stream, validationEventHandler);
}
Řešení
using System.IO;
using System.Xml.Schema;
...
public void TestMethod(XmlReader reader, ValidationEventHandler validationEventHandler)
{
XmlSchema.Read(reader, validationEventHandler);
}