CA3075: Nem biztonságos DTD-feldolgozás
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA3075 |
Cím | Nem biztonságos DTD-feldolgozás |
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ágos DtdProcessing példányokat használ, vagy külső entitásforrásokra hivatkozik, az elemző elfogadhatja a nem megbízható bemeneteket, és bizalmas információkat tehet közzé a támadók számára.
Szabály leírása
A dokumentumtípus-definíció (DTD) egyike annak a két módszernek, amelyekkel az XML-elemzők meghatározhatják egy dokumentum érvényességét a World Wide Web Consortium (W3C) Extensible Markup Language (XML) 1.0 által meghatározottak szerint. Ez a szabály olyan tulajdonságokat és példányokat keres, amelyek nem megbízható adatokat fogadnak el, hogy figyelmeztessék a fejlesztőket az esetleges információfeltárási fenyegetésekre vagy a Szolgáltatásmegtagadási (DoS) támadásokra. Ez a szabály a következő esetekben aktiválódik:
A DtdProcessing engedélyezve van a XmlReader példányon, amely a külső XML-entitásokat a használatával XmlUrlResolveroldja fel.
Az InnerXml XML-tulajdonság be van állítva.
DtdProcessing tulajdonság értéke Parse.
A nem megbízható bemenetek feldolgozása XmlResolver ahelyett, hogy XmlSecureResolvera .
A XmlReader.Create metódus meghívása nem biztonságos XmlReaderSettings példánysal történik, vagy egyáltalán nincs példány.
XmlReader nem biztonságos alapértelmezett beállításokkal vagy értékekkel jön létre.
Minden ilyen esetben az eredmény ugyanaz: az XML-t feldolgozó gép fájlrendszeréből vagy hálózati megosztásaiból származó tartalom ki lesz téve a támadónak, vagy a DTD-feldolgozás használható DoS-vektorként.
Szabálysértések kijavítása
Az útvonaladatok felfedésének elkerülése érdekében az XmlTextReader-kivételek helyes elfogása és feldolgozása.
XmlSecureResolver Ezzel korlátozhatja az XmlTextReader által elérhető erőforrásokat.
Ne engedélyezze a XmlReader külső erőforrások megnyitását a XmlResolver tulajdonság null értékre állításával.
Győződjön meg arról, hogy a DataViewManager.DataViewSettingCollectionString tulajdonság megbízható forrásból van hozzárendelve.
.NET-keretrendszer 3.5-ös és korábbi verziók
Tiltsa le a DTD-feldolgozást, ha nem megbízható forrásokkal foglalkozik a ProhibitDtd tulajdonság igaz értékre állításával.
Az XmlTextReader osztály teljes megbízhatósági öröklési igénysel rendelkezik.
4-.NET-keretrendszer és újabb verziók
Ne engedélyezze a DtdProcessing használatát, ha nem megbízható forrásokkal foglalkozik, ha a XmlReaderSettings.DtdProcessing tulajdonságot Tiltás vagy Mellőzés értékre állítja.
Győződjön meg arról, hogy a Load() metódus minden InnerXml-esetben xmlReader-példányt használ.
Megjegyzés:
Ez a szabály hamis pozitív értékeket jelenthet néhány érvényes XmlSecureResolver-példányon.
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 CA3075
// The code that's violating the rule is on this line.
#pragma warning restore CA3075
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.CA3075.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Példák pszeudokódokra
Szabálysértés 1
using System.IO;
using System.Xml.Schema;
class TestClass
{
public XmlSchema Test
{
get
{
var src = "";
TextReader tr = new StreamReader(src);
XmlSchema schema = XmlSchema.Read(tr, null); // warn
return schema;
}
}
}
1\. megoldás
using System.IO;
using System.Xml;
using System.Xml.Schema;
class TestClass
{
public XmlSchema Test
{
get
{
var src = "";
TextReader tr = new StreamReader(src);
XmlReader reader = XmlReader.Create(tr, new XmlReaderSettings() { XmlResolver = null });
XmlSchema schema = XmlSchema.Read(reader , null);
return schema;
}
}
}
2. szabálysértés
using System.Xml;
namespace TestNamespace
{
public class TestClass
{
public XmlReaderSettings settings = new XmlReaderSettings();
public void TestMethod(string path)
{
var reader = XmlReader.Create(path, settings); // warn
}
}
}
2\. megoldás
using System.Xml;
namespace TestNamespace
{
public class TestClass
{
public XmlReaderSettings settings = new XmlReaderSettings()
{
DtdProcessing = DtdProcessing.Prohibit
};
public void TestMethod(string path)
{
var reader = XmlReader.Create(path, settings);
}
}
}
Szabálysértés 3
using System.Xml;
namespace TestNamespace
{
public class DoNotUseSetInnerXml
{
public void TestMethod(string xml)
{
XmlDocument doc = new XmlDocument() { XmlResolver = null };
doc.InnerXml = xml; // warn
}
}
}
using System.Xml;
namespace TestNamespace
{
public class DoNotUseLoadXml
{
public void TestMethod(string xml)
{
XmlDocument doc = new XmlDocument(){ XmlResolver = null };
doc.LoadXml(xml); // warn
}
}
}
3\. megoldás
using System.Xml;
public static void TestMethod(string xml)
{
XmlDocument doc = new XmlDocument() { XmlResolver = null };
System.IO.StringReader sreader = new System.IO.StringReader(xml);
XmlReader reader = XmlReader.Create(sreader, new XmlReaderSettings() { XmlResolver = null });
doc.Load(reader);
}
Szabálysértés 4
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace TestNamespace
{
public class UseXmlReaderForDeserialize
{
public void TestMethod(Stream stream)
{
XmlSerializer serializer = new XmlSerializer(typeof(UseXmlReaderForDeserialize));
serializer.Deserialize(stream); // warn
}
}
}
4. megoldás
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace TestNamespace
{
public class UseXmlReaderForDeserialize
{
public void TestMethod(Stream stream)
{
XmlSerializer serializer = new XmlSerializer(typeof(UseXmlReaderForDeserialize));
XmlReader reader = XmlReader.Create(stream, new XmlReaderSettings() { XmlResolver = null });
serializer.Deserialize(reader );
}
}
}
Szabálysértés 5
using System.Xml;
using System.Xml.XPath;
namespace TestNamespace
{
public class UseXmlReaderForXPathDocument
{
public void TestMethod(string path)
{
XPathDocument doc = new XPathDocument(path); // warn
}
}
}
5. megoldás
using System.Xml;
using System.Xml.XPath;
namespace TestNamespace
{
public class UseXmlReaderForXPathDocument
{
public void TestMethod(string path)
{
XmlReader reader = XmlReader.Create(path, new XmlReaderSettings() { XmlResolver = null });
XPathDocument doc = new XPathDocument(reader);
}
}
}
6. szabálysértés
using System.Xml;
namespace TestNamespace
{
class TestClass
{
public XmlDocument doc = new XmlDocument() { XmlResolver = new XmlUrlResolver() };
}
}
6. megoldás
using System.Xml;
namespace TestNamespace
{
class TestClass
{
public XmlDocument doc = new XmlDocument() { XmlResolver = null }; // or set to a XmlSecureResolver instance
}
}
Szabálysértés 7
using System.Xml;
namespace TestNamespace
{
class TestClass
{
private static void TestMethod()
{
var reader = XmlTextReader.Create(""doc.xml""); //warn
}
}
}
using System.Xml;
namespace TestNamespace
{
public class TestClass
{
public void TestMethod(string path)
{
try {
XmlTextReader reader = new XmlTextReader(path); // warn
}
catch { throw ; }
finally {}
}
}
}
7. megoldás
using System.Xml;
namespace TestNamespace
{
public class TestClass
{
public void TestMethod(string path)
{
XmlReaderSettings settings = new XmlReaderSettings() { XmlResolver = null };
XmlReader reader = XmlReader.Create(path, settings);
}
}
}
Megjegyzés:
Bár XmlReader.Create a példányok létrehozásának XmlReader ajánlott módja, a példányok viselkedése eltér a következőtől XmlTextReader: . Az an XmlReader normalizálja Create az \n
XML-értékeket\r\n
, miközben XmlTextReader megőrzi a \r\n
sorozatot.
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: