Säkerhetsvägledning för DataSet och DataTable
Den här artikeln gäller för:
- .NET Framework (alla versioner)
- .NET Core och senare
- .NET 5 och senare
Typerna DataSet och DataTable är äldre .NET-komponenter som tillåter att datauppsättningar representeras som hanterade objekt. Dessa komponenter introducerades i .NET Framework 1.0 som en del av den ursprungliga ADO.NET infrastrukturen. Deras mål var att tillhandahålla en hanterad vy över en relationsdatauppsättning och abstrahera bort om den underliggande datakällan var XML, SQL eller någon annan teknik.
Mer information om ADO.NET, inklusive modernare datavyparadigm, finns i dokumentationen om ADO.NET.
Standardbegränsningar vid deserialisering av en DataSet eller DataTable från XML
På alla versioner av .NET Framework, .NET Core och .NET DataSet
som stöds, och DataTable
gör följande begränsningar för vilka typer av objekt som kan finnas i deserialiserade data. Som standard är den här listan begränsad till:
- Primitiver och primitiva motsvarigheter: , , , , , ,
bool
,char
sbyte
,byte
short
ushort
int
uint
,long
,ulong
,float
double
decimal
DateTime
DateTimeOffset
TimeSpan
string
,Guid
SqlBinary
SqlBoolean
SqlByte
,SqlBytes
, ,SqlChars
,SqlDateTime
, ,SqlDecimal
,SqlDouble
,SqlGuid
och .SqlInt16
SqlInt32
SqlInt64
SqlMoney
SqlSingle
SqlString
- Vanliga icke-primitiva:
Type
,Uri
ochBigInteger
. -
Vanliga System.Drawing-typer:
Color
,Point
,PointF
,Rectangle
,RectangleF
,Size
, ochSizeF
. -
Enum
Typer. - Matriser och listor med ovanstående typer.
Om inkommande XML-data innehåller ett objekt vars typ inte finns i den här listan:
Ett undantag utlöses med följande meddelande och stackspårning. Felmeddelande: System.InvalidOperationException: Skriv "<Type Name>, Version=<n.n.n.n>, Culture=<culture>, PublicKeyToken=<token value>" tillåts inte här. Stackspårning: på System.Data.TypeLimiter.EnsureTypeIsAllowed(Type type, TypeLimiter capturedLimiter) at System.Data.DataColumn.UpdateColumnType(Type type, StorageType typeCode) at System.Data.DataColumn.set_DataType(Type value)
Deserialiseringsåtgärden misslyckas.
Vid inläsning av XML till en befintlig DataSet
eller DataTable
instans beaktas även befintliga kolumndefinitioner. Om tabellen redan innehåller en kolumndefinition av en anpassad typ läggs den typen tillfälligt till i listan över tillåtna under xml-deserialiseringsåtgärden.
Kommentar
När du lägger till kolumner i en DataTable
läser ReadXml
inte schemat från XML-koden, och om schemat inte matchar läss det inte heller i posterna, så du måste lägga till alla kolumner själv för att använda den här metoden.
XmlReader xmlReader = GetXmlReader();
// Assume the XML blob contains data for type MyCustomClass.
// The following call to ReadXml fails because MyCustomClass isn't in the allowed types list.
DataTable table = new DataTable("MyDataTable");
table.ReadXml(xmlReader);
// However, the following call to ReadXml succeeds, since the DataTable instance
// already defines a column of type MyCustomClass.
DataTable table = new DataTable("MyDataTable");
table.Columns.Add("MyColumn", typeof(MyCustomClass));
table.ReadXml(xmlReader); // this call will succeed
Begränsningarna för objekttyp gäller även när du använder XmlSerializer
för att deserialisera en instans av DataSet
eller DataTable
. De kanske dock inte gäller när du använder BinaryFormatter
för att deserialisera en instans av DataSet
eller DataTable
.
Begränsningarna för objekttyp gäller inte när du använder DataAdapter.Fill
, till exempel när en DataTable
instans fylls i direkt från en databas utan att använda XML-deserialiserings-API:erna.
Utöka listan över tillåtna typer
En app kan utöka listan över tillåtna typer till att omfatta anpassade typer utöver de inbyggda typer som anges ovan. Om listan över tillåtna typer utökas påverkar ändringen allaDataSet
instanser och DataTable
instanser i appen. Det går inte att ta bort typer från listan över inbyggda tillåtna typer.
Utöka via konfiguration (.NET Framework 4.0 och senare)
App.config kan användas för att utöka listan över tillåtna typer. Så här utökar du listan över tillåtna typer:
- Använd -elementet
<configSections>
för att lägga till en referens till avsnittet System.Data-konfiguration . - Använd
<system.data.dataset.serialization>
/<allowedTypes>
för att ange ytterligare typer.
Varje <add>
element måste bara ange en typ med hjälp av dess sammansättningskvalificerade typnamn. Om du vill lägga till ytterligare typer i listan över tillåtna typer använder du flera <add>
element.
Följande exempel visar hur du utökar listan över tillåtna typer genom att lägga till den anpassade typen Fabrikam.CustomType
.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="system.data.dataset.serialization" type="System.Data.SerializationSettingsSectionGroup, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="allowedTypes" type="System.Data.AllowedTypesSectionHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</sectionGroup>
</configSections>
<system.data.dataset.serialization>
<allowedTypes>
<!-- <add type="assembly qualified type name" /> -->
<add type="Fabrikam.CustomType, Fabrikam, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2b3831f2f2b744f7" />
<!-- additional <add /> elements as needed -->
</allowedTypes>
</system.data.dataset.serialization>
</configuration>
Om du vill hämta det kvalificerade sammansättningsnamnet för en typ använder du egenskapen Type.AssemblyQualifiedName , vilket visas i följande kod.
string assemblyQualifiedName = typeof(Fabrikam.CustomType).AssemblyQualifiedName;
Utöka via konfiguration (.NET Framework 2.0 – 3.5)
Om din app riktar in sig på .NET Framework 2.0 eller 3.5 kan du fortfarande använda ovanstående App.config-mekanism för att utöka listan över tillåtna typer. Elementet ser dock <configSections>
något annorlunda ut, vilket visas i följande kod:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!-- The below <sectionGroup> and <section> are specific to .NET Framework 2.0 and 3.5. -->
<sectionGroup name="system.data.dataset.serialization" type="System.Data.SerializationSettingsSectionGroup, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="allowedTypes" type="System.Data.AllowedTypesSectionHandler, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</sectionGroup>
</configSections>
<system.data.dataset.serialization>
<allowedTypes>
<!-- <add /> elements, as demonstrated in the .NET Framework 4.0 - 4.8 sample code above. -->
</allowedTypes>
</system.data.dataset.serialization>
</configuration>
Utöka programmatiskt (.NET Framework, .NET Core, .NET 5+)
Listan över tillåtna typer kan också utökas programmatiskt med hjälp av AppDomain.SetData med den välkända nyckeln System.Data.DataSetDefaultAllowedTypes, enligt följande kod.
Type[] extraAllowedTypes = new Type[]
{
typeof(Fabrikam.CustomType),
typeof(Contoso.AdditionalCustomType)
};
AppDomain.CurrentDomain.SetData("System.Data.DataSetDefaultAllowedTypes", extraAllowedTypes);
Om du använder tilläggsmekanismen måste värdet som är associerat med nyckeln System.Data.DataSetDefaultAllowedTypes vara av typen Type[]
.
I .NET Framework kan listan över tillåtna typer utökas både med App.config och AppDomain.SetData
. I det här fallet DataSet
DataTable
och tillåter att ett objekt deserialiseras som en del av data om dess typ finns i någon av dessa listor.
Kör en app i granskningsläge (.NET Framework)
I .NET Framework DataSet
och DataTable
tillhandahålla en funktion för granskningsläge. När granskningsläget är aktiverat DataSet
och DataTable
jämför typerna av inkommande objekt med listan över tillåtna typer. Men om ett objekt vars typ inte är tillåten visas genereras inget undantag.
DataSet
I stället och DataTable
meddela eventuella anslutna TraceListener
instanser att det finns en misstänkt typ, vilket gör att du TraceListener
kan logga den här informationen. Inget undantag utlöses och deserialiseringsåtgärden fortsätter.
Varning
Att köra en app i "granskningsläge" bör bara vara ett tillfälligt mått som används för testning. När granskningsläget är aktiverat DataSet
och DataTable
inte tillämpar typbegränsningar, vilket kan medföra ett säkerhetshål i din app. Mer information finns i avsnitten med titeln Ta bort alla typbegränsningar och Säkerhet med avseende på ej betrodda indata.
Granskningsläget kan aktiveras via App.config:
-
<configSections>
i det här dokumentet. - Använd
<allowedTypes auditOnly="true">
för att aktivera granskningsläge, enligt följande markering.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!-- See the section of this document titled "Extending through configuration" for the appropriate
<sectionGroup> and <section> elements to put here, depending on whether you're running .NET
Framework 2.0 - 3.5 or 4.0 - 4.8. -->
</configSections>
<system.data.dataset.serialization>
<allowedTypes auditOnly="true"> <!-- setting auditOnly="true" enables audit mode -->
<!-- Optional <add /> elements as needed. -->
</allowedTypes>
</system.data.dataset.serialization>
</configuration>
När granskningsläget är aktiverat kan du använda App.config för att ansluta önskad TraceListener
till det DataSet
inbyggda TraceSource.
Namnet på den inbyggda spårningskällan är System.Data.DataSet. Följande exempel visar hur du skriver spårningshändelser till konsolen och till en loggfil på disken.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<sources>
<source name="System.Data.DataSet"
switchType="System.Diagnostics.SourceSwitch"
switchValue="Warning">
<listeners>
<!-- write to the console -->
<add name="console"
type="System.Diagnostics.ConsoleTraceListener" />
<!-- *and* write to a log file on disk -->
<add name="filelog"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="c:\logs\mylog.txt" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
Mer information om TraceSource
och TraceListener
finns i dokumentet Så här använder du TraceSource och filter med spårningslyssnare.
Kommentar
Att köra en app i granskningsläge är inte tillgängligt i .NET Core eller i .NET 5 och senare.
Ta bort alla typbegränsningar
Om en app måste ta bort alla typbegränsningsbegränsningar från DataSet
och DataTable
:
- Det finns flera alternativ för att förhindra begränsningar för typbegränsning.
- Vilka alternativ som är tillgängliga beror på vilket ramverk appen riktar in sig på.
Varning
Om du tar bort alla typer av begränsningar kan du skapa ett säkerhetshål i appen. När du använder den här mekanismen kontrollerar du att appen inte använder DataSet
eller DataTable
läser ej betrodda indata. Mer information finns i CVE-2020-1147 och följande avsnitt med titeln Säkerhet med avseende på ej betrodda indata.
Via AppContext-konfiguration (.NET Framework 4.6 och senare, .NET Core 2.1 och senare, .NET 5 och senare)
Växeln AppContext
, Switch.System.Data.AllowArbitraryDataSetTypeInstantiation
, när den är inställd på true
tar bort alla typbegränsningsbegränsningar från DataSet
och DataTable
.
I .NET Framework kan den här växeln aktiveras via App.config, enligt följande konfiguration:
<configuration>
<runtime>
<!-- Warning: setting the following switch can introduce a security problem. -->
<AppContextSwitchOverrides value="Switch.System.Data.AllowArbitraryDataSetTypeInstantiation=true" />
</runtime>
</configuration>
I ASP.NET är elementet <AppContextSwitchOverrides>
inte tillgängligt. I stället kan växeln aktiveras via Web.config, som du ser i följande konfiguration:
<configuration>
<appSettings>
<!-- Warning: setting the following switch can introduce a security problem. -->
<add key="AppContext.SetSwitch:Switch.System.Data.AllowArbitraryDataSetTypeInstantiation" value="true" />
</appSettings>
</configuration>
Mer information finns i elementet <AppContextSwitchOverrides> .
I .NET Core, .NET 5 och ASP.NET Core styrs den här inställningen av runtimeconfig.json, enligt följande JSON:
{
"runtimeOptions": {
"configProperties": {
"Switch.System.Data.AllowArbitraryDataSetTypeInstantiation": true
}
}
}
Mer information finns i ".NET Core-körningskonfigurationsinställningar".
AllowArbitraryDataSetTypeInstantiation
kan också ställas in programmatiskt via AppContext.SetSwitch i stället för att använda en konfigurationsfil, enligt följande kod:
// Warning: setting the following switch can introduce a security problem.
AppContext.SetSwitch("Switch.System.Data.AllowArbitraryDataSetTypeInstantiation", true);
Om du väljer föregående programmatiska metod bör anropet till AppContext.SetSwitch
ske tidigt i appstarten.
Via det datoromfattande registret (.NET Framework 2.0– 4.x)
Om AppContext
det inte är tillgängligt kan du inaktivera typbegränsningskontroller med Windows-registret:
- En administratör måste konfigurera registret.
- Att använda registret är en datoromfattande ändring som påverkar alla appar som körs på datorn.
Type | Värde |
---|---|
Registernyckel | HKLM\SOFTWARE\Microsoft\.NETFramework\AppContext |
Värdenamn | Switch.System.Data.AllowArbitraryDataSetTypeInstantiation |
Värdetyp | REG_SZ |
Värdedata | true |
På ett 64-bitars operativsystem måste jag lägga till det här värdet för både 64-bitarsnyckeln (visas ovan) och 32-bitarsnyckeln. 32-bitarsnyckeln finns på HKLM\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\AppContext
.
Mer information om hur du använder registret för att konfigurera AppContext
finns i "AppContext för bibliotekskonsumenter".
Säkerhet när det gäller ej betrodda indata
Även om DataSet
och DataTable
inför standardbegränsningar för de typer som tillåts finnas vid deserialisering av XML-nyttolaster, DataSet
och DataTable
är i allmänhet inte säkra när de fylls med ej betrodda indata. Följande är en icke-fullständig lista över sätt som en instans eller DataSet
instans DataTable
kan läsa ej betrodda indata på.
- En
DataAdapter
refererar till en databas ochDataAdapter.Fill
metoden används för att fylla i enDataSet
med innehållet i en databasfråga. - Metoden
DataSet.ReadXml
ellerDataTable.ReadXml
används för att läsa en XML-fil som innehåller kolumn- och radinformation. - En
DataSet
ellerDataTable
instans serialiseras som en del av en ASP.NET (SOAP) webbtjänster eller WCF-slutpunkt. - En serialiserare som
XmlSerializer
används för att deserialisera en ellerDataSet
enDataTable
instans från en XML-dataström. - En serialiserare som
JsonConvert
används för att deserialisera en ellerDataSet
enDataTable
instans från en JSON-ström.JsonConvert
är en metod i det populära newtonsoft.Json-biblioteket från tredje part. - En serialiserare som
BinaryFormatter
används för att deserialisera en ellerDataSet
enDataTable
instans från en rå byteström.
I det här dokumentet beskrivs säkerhetsöverväganden för föregående scenarier.
Använd DataAdapter.Fill
för att fylla i en DataSet
från en datakälla som inte är betrodd
En DataSet
instans kan fyllas i från en DataAdapter
med hjälp DataAdapter.Fill
av metoden, som du ser i följande exempel.
// Assumes that connection is a valid SqlConnection object.
string queryString =
"SELECT CustomerID, CompanyName FROM dbo.Customers";
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);
DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");
(Kodexemplet ovan är en del av ett större urval som finns på Fylla i en DataSet från en DataAdapter.)
De flesta appar kan förenkla och anta att deras databaslager är betrott. Men om du har för vana att hotmodellera dina appar kan din hotmodell anse att det finns en förtroendegräns mellan programmet (klienten) och databasskiktet (servern). Att använda ömsesidig autentisering eller AAD-autentisering mellan klient och server är ett sätt att hantera de risker som är förknippade med detta. I resten av det här avsnittet beskrivs det möjliga resultatet av att en klient ansluter till en server som inte är betrodd.
Konsekvenserna av att peka en DataAdapter
på en obetrodd datakälla beror på implementeringen av DataAdapter
sig själv.
SqlDataAdapter
För den inbyggda typen SqlDataAdapter kan hänvisning till en ej betrodd datakälla leda till en DoS-attack (Denial of Service). DoS-attacken kan leda till att appen slutar svara eller kraschar. Om en angripare kan plantera en DLL tillsammans med appen kan de också uppnå lokal kodkörning.
Andra DataAdapter-typer
Implementeringar från tredje part DataAdapter
måste göra sina egna bedömningar av vilka säkerhetsgarantier de tillhandahåller inför ej betrodda indata. .NET kan inte ge några säkerhetsgarantier för dessa implementeringar.
DataSet.ReadXml och DataTable.ReadXml
Metoderna DataSet.ReadXml
och DataTable.ReadXml
är inte säkra när de används med ej betrodda indata. Vi rekommenderar starkt att konsumenterna i stället överväger att använda något av de alternativ som beskrivs senare i det här dokumentet.
Implementeringarna av DataSet.ReadXml
och DataTable.ReadXml
skapades ursprungligen före serialiseringsrisker var en väl förstådd hotkategori. Därför följer koden inte aktuella rekommenderade säkerhetsmetoder. Dessa API:er kan användas som vektorer för angripare för att utföra DoS-attacker mot webbappar. Dessa attacker kan göra att webbtjänsten inte svarar eller resulterar i oväntad processavslutning. Ramverket tillhandahåller inga åtgärder för dessa attackkategorier och .NET anser att det här beteendet är "avsiktligt".
.NET har släppt säkerhetsuppdateringar för att åtgärda vissa problem, till exempel avslöjande av information eller fjärrkörning av kod i DataSet.ReadXml
och DataTable.ReadXml
. .NET-säkerhetsuppdateringarna kanske inte ger fullständigt skydd mot dessa hotkategorier. Konsumenterna bör bedöma sina individuella scenarier och överväga sin potentiella exponering för dessa risker.
Konsumenterna bör vara medvetna om att säkerhetsuppdateringar av dessa API:er kan påverka programkompatibiliteten i vissa situationer. Dessutom finns det en risk att en ny säkerhetsrisk i dessa API:er identifieras för vilka .NET inte praktiskt taget kan publicera en säkerhetsuppdatering.
Vi rekommenderar att konsumenter av dessa API:er antingen:
- Överväg att använda något av de alternativ som beskrivs senare i det här dokumentet.
- Utför enskilda riskbedömningar i sina appar.
Det är konsumentens ansvar att avgöra om dessa API:er ska användas. Konsumenterna bör bedöma eventuella säkerhetsrisker, tekniska och juridiska risker, inklusive regelkrav, som kan följa med användning av dessa API:er.
DataSet och DataTable via ASP.NET webbtjänster eller WCF
Det är möjligt att acceptera en DataSet
eller en DataTable
instans i en ASP.NET -webbtjänst (SOAP), vilket visas i följande kod:
using System.Data;
using System.Web.Services;
[WebService(Namespace = "http://contoso.com/")]
public class MyService : WebService
{
[WebMethod]
public string MyWebMethod(DataTable dataTable)
{
/* Web method implementation. */
}
}
En variant av detta är inte att acceptera DataSet
eller DataTable
direkt som en parameter, utan i stället acceptera den som en del av det övergripande SOAP-serialiserade objektdiagrammet, som visas i följande kod:
using System.Data;
using System.Web.Services;
[WebService(Namespace = "http://contoso.com/")]
public class MyService : WebService
{
[WebMethod]
public string MyWebMethod(MyClass data)
{
/* Web method implementation. */
}
}
public class MyClass
{
// Property of type DataTable, automatically serialized and
// deserialized as part of the overall MyClass payload.
public DataTable MyDataTable { get; set; }
}
Du kan också använda WCF i stället för ASP.NET webbtjänster:
using System.Data;
using System.ServiceModel;
[ServiceContract(Namespace = "http://contoso.com/")]
public interface IMyContract
{
[OperationContract]
string MyMethod(DataTable dataTable);
[OperationContract]
string MyOtherMethod(MyClass data);
}
public class MyClass
{
// Property of type DataTable, automatically serialized and
// deserialized as part of the overall MyClass payload.
public DataTable MyDataTable { get; set; }
}
I alla dessa fall är hotmodellen och säkerhetsgarantierna desamma som avsnittet DataSet.ReadXml och DataTable.ReadXml.
Deserialisera en DataSet eller DataTable via XmlSerializer
Utvecklare kan använda XmlSerializer
för att deserialisera DataSet
och DataTable
instanser, enligt följande kod:
using System.Data;
using System.IO;
using System.Xml.Serialization;
public DataSet PerformDeserialization1(Stream stream) {
XmlSerializer serializer = new XmlSerializer(typeof(DataSet));
return (DataSet)serializer.Deserialize(stream);
}
public MyClass PerformDeserialization2(Stream stream) {
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
return (MyClass)serializer.Deserialize(stream);
}
public class MyClass
{
// Property of type DataTable, automatically serialized and
// deserialized as part of the overall MyClass payload.
public DataTable MyDataTable { get; set; }
}
I dessa fall är hotmodellen och säkerhetsgarantierna desamma som avsnittet DataSet.ReadXml och DataTable.ReadXml.
Deserialisera en DataSet eller DataTable via JsonConvert
Newtonsoft-biblioteket från tredje part Json.NET kan användas för att deserialisera DataSet
och DataTable
instanser, som du ser i följande kod:
using System.Data;
using Newtonsoft.Json;
public DataSet PerformDeserialization1(string json) {
return JsonConvert.DeserializeObject<DataSet>(data);
}
public MyClass PerformDeserialization2(string json) {
return JsonConvert.DeserializeObject<MyClass>(data);
}
public class MyClass
{
// Property of type DataTable, automatically serialized and
// deserialized as part of the overall MyClass payload.
public DataTable MyDataTable { get; set; }
}
Det är inte säkert att deserialisera en DataSet
eller DataTable
på det här sättet från en obetrodd JSON-blob. Det här mönstret är sårbart för en överbelastningsattack. En sådan attack kan krascha appen eller göra att den inte svarar.
Kommentar
Microsoft garanterar eller stöder inte implementering av bibliotek från tredje part som Newtonsoft.Json. Den här informationen tillhandahålls för fullständighet och är korrekt när detta skrivs.
Deserialisera en DataSet eller DataTable via BinaryFormatter
Du får aldrig använda BinaryFormatter
, NetDataContractSerializer
, SoapFormatter
eller relaterade osäkra formaterare för att deserialisera en eller DataSet
en DataTable
instans från en ej betrodd nyttolast:
- Detta är känsligt för en fullständig fjärrkodkörningsattack.
- Det räcker inte att använda en anpassad
SerializationBinder
för att förhindra en sådan attack.
Säkra ersättningar
För appar som antingen:
- Acceptera
DataSet
ellerDataTable
via en .asmx SOAP-slutpunkt eller en WCF-slutpunkt. - Deserialisera ej betrodda data till en instans av
DataSet
ellerDataTable
.
Överväg att ersätta objektmodellen för att använda Entity Framework. Entity Framework:
- Är ett omfattande, modernt, objektorienterat ramverk som kan representera relationsdata.
- Ger ett varierat ekosystem med databasprovidrar för att göra det enkelt att projicera databasfrågor via dina Entity Framework-objektmodeller.
- Erbjuder inbyggt skydd vid deserialisering av data från ej betrodda källor.
För appar som använder .aspx
SOAP-slutpunkter bör du överväga att ändra dessa slutpunkter så att de använder WCF. WCF är en mer komplett ersättning för .asmx
webbtjänster. WCF-slutpunkter kan exponeras via SOAP för kompatibilitet med befintliga anropare.
Kodanalysverktyg
Säkerhetsregler för kodanalys, som körs när källkoden kompileras, kan hjälpa dig att hitta säkerhetsrisker relaterade till det här säkerhetsproblemet i C# och Visual Basic-kod. Microsoft.CodeAnalysis.FxCopAnalyzers är ett NuGet-paket med kodanalysverktyg som distribueras på nuget.org.
En översikt över kodanalyserare finns i Översikt över källkodsanalyserare.
Aktivera följande Microsoft.CodeAnalysis.FxCopAnalyzers-regler:
- CA2350: Använd inte DataTable.ReadXml() med ej betrodda data
- CA2351: Använd inte DataSet.ReadXml() med ej betrodda data
- CA2352: Osäkra datauppsättningar eller datatabeller i serialiserbar typ kan vara sårbara för fjärranslutna kodkörningsattacker
- CA2353: Osäker datauppsättning eller DataTable i serialiserbar typ
- CA2354: Osäkra datauppsättningar eller datatabeller i deserialiserat objektdiagram kan vara sårbara för fjärranslutna kodkörningsattacker
- CA2355: Osäker datauppsättning eller datatabelltyp som finns i diagram över deserializable-objekt
- CA2356: Osäker datauppsättning eller datatabelltyp i objektdiagram för webbdeserializable
- CA2361: Se till att den automatiskt genererade klassen som innehåller DataSet.ReadXml() inte används med ej betrodda data
- CA2362: Osäkra datauppsättningar eller datatabeller i autogenererad serialiserbar typ kan vara sårbara för fjärranslutna kodkörningsattacker
Mer information om hur du konfigurerar regler finns i Använda kodanalysverktyg.
De nya säkerhetsreglerna är tillgängliga i följande NuGet-paket:
- Microsoft.CodeAnalysis.FxCopAnalyzers 3.3.0: för Visual Studio 2019 version 16.3 eller senare
- Microsoft.CodeAnalysis.FxCopAnalyzers 2.9.11: för Visual Studio 2017 version 15.9 eller senare