Dela via


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: , , , , , , ushort, intuint, decimalulongdoublelongfloat, DateTime, DateTimeOffset, stringTimeSpanSqlBinarySqlBooleanSqlByteSqlBytesGuid, SqlDoubleSqlDecimalSqlCharsSqlDateTime, SqlGuid, , SqlInt16, SqlInt32, , SqlInt64, SqlMoney, SqlSingleoch .SqlStringshortbytesbytecharbool
  • Vanliga icke-primitiva: Type, Urioch BigInteger.
  • Vanliga System.Drawing-typer: Color, Point, PointF, Rectangle, RectangleF, Size, och SizeF.
  • 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 DataTablelä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 DataSetDataTable 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 Valv ty när det gäller ej betrodda indata.

Granskningsläget kan aktiveras via App.config:

<?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 TraceListenerfinns 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 Valv ty 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 AppContextfinns i "AppContext för bibliotekskonsumenter".

Valv ty 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 DataTable instans DataSet kan läsa ej betrodda indata på.

  • En DataAdapter refererar till en databas och DataAdapter.Fill metoden används för att fylla i en DataSet med innehållet i en databasfråga.
  • Metoden DataSet.ReadXml eller DataTable.ReadXml används för att läsa en XML-fil som innehåller kolumn- och radinformation.
  • En DataSet eller DataTable 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 eller DataTable en DataSet instans från en XML-dataström.
  • En serialiserare som JsonConvert används för att deserialisera en eller DataTable en DataSet 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 eller DataTable en DataSet 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.Fillav 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

Det populära Newtonsoft-biblioteket från tredje part Json.NET kan användas för att deserialisera DataSet och DataTable instanser, enligt 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, SoapFormattereller relaterade osäkra formaterare för att deserialisera en eller DataTable en DataSet 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.

Valv ersättningar

För appar som antingen:

  • Acceptera DataSet eller DataTable via en .asmx SOAP-slutpunkt eller en WCF-slutpunkt.
  • Deserialisera ej betrodda data till en instans av DataSet eller DataTable.

Ö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