Share via


CA3061: Lägg inte till schema efter URL

Property Värde
Regel-ID CA3061
Rubrik Lägg inte till schema efter URL
Kategori Säkerhet
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Nej

Orsak

Överlagring av XmlSchemaCollection.Add(String, String) används XmlUrlResolver för att ange ett externt XML-schema i form av en URI. Om URI-strängen är fläckad kan det leda till parsning av ett skadligt XML-schema, vilket möjliggör inkludering av XML-bomber och skadliga externa entiteter. Detta kan göra det möjligt för en angripare att utföra en överbelastningsattack, informationsutlämnande eller förfalskningsattack på serversidan.

Regelbeskrivning

Använd inte den osäkra överlagringen Add av metoden eftersom den kan orsaka farliga externa referenser.

Så här åtgärdar du överträdelser

  • Använd inte XmlSchemaCollection.Add(String, String).

När du ska ignorera varningar

Ignorera den här regeln om du är säker på att xml-koden inte löser farliga externa referenser.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable CA3061
// The code that's violating the rule is on this line.
#pragma warning restore CA3061

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.CA3061.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

Exempel på pseudokod

Kränkning

Följande pseudokodexempel illustrerar det mönster som identifierats av den här regeln. Den andra parameterns typ är string.

using System;
using System.Xml.Schema;
...
XmlSchemaCollection xsc = new XmlSchemaCollection();
xsc.Add("urn: bookstore - schema", "books.xsd");

Lösning

using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
...
XmlSchemaCollection xsc = new XmlSchemaCollection();
xsc.Add("urn: bookstore - schema", new XmlTextReader(new FileStream(""xmlFilename"", FileMode.Open)));