Sdílet prostřednictvím


CA2356: Nezabezpečená datová sada nebo typ datové tabulky v grafu deserializovaného objektu webu

Vlastnost Hodnota
ID pravidla CA2356
Název Nezabezpečená datová sada nebo datová tabulka v grafu deserializovaných objektů webu
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 8 No

Příčina

Metoda s System.Web.Services.WebMethodAttribute nebo má parametr, který může odkazovat na nebo DataSetDataTable.System.ServiceModel.OperationContractAttribute

Toto pravidlo používá jiný přístup k podobnému pravidlu CA2355: Nezabezpečená datová sada nebo DataTable v deserializovaném objektovém grafu a najde různá upozornění.

Popis pravidla

Při deserializaci nedůvěryhodného vstupu a deserializovaného objektového grafu obsahuje objekt nebo DataSetDataTable, útočník může vytvořit škodlivou datovou část, která provede útok dos. Může se jednat o neznámá ohrožení zabezpečení vzdáleného spuštění kódu.

Další informace naleznete v tématu DataSet a DataTable security guidance.

Jak opravit porušení

  • Pokud je to možné, použijte Entity Framework místo DataSet a DataTable.
  • Zfalšujte serializovaná data a zfalšujte je. Po serializaci kryptograficky podepisujte serializovaná data. Před deserializací ověřte kryptografický podpis. Chraňte kryptografický klíč před zveřejněním a návrhem obměny klíčů.

Kdy potlačit upozornění

Upozornění z tohoto pravidla je bezpečné potlačit, pokud:

  • Víte, že vstup je důvěryhodný. Vezměte v úvahu, že hranice důvěryhodnosti vaší aplikace a toky dat se můžou v průběhu času měnit.
  • Provedli jste jedno z bezpečnostních opatření v části Jak opravit porušení.

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 CA2356
// The code that's violating the rule is on this line.
#pragma warning restore CA2356

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.CA2356.severity = none

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklady pseudokódu

Porušení

using System;
using System.Data;
using System.Web.Services;

[WebService(Namespace = "http://contoso.example.com/")]
public class MyService : WebService
{
    [WebMethod]
    public string MyWebMethod(DataTable dataTable)
    {
        return null;
    }
}

CA2350: Ujistěte se, že vstup DataTable.ReadXml() je důvěryhodný.

CA2351: Ujistěte se, že vstup DataSet.ReadXml() je důvěryhodný.

CA2352: Nebezpečné datové sady nebo datové tabulky v serializovatelném typu mohou být ohroženy útoky vzdáleného spuštění kódu

CA2353: Nezabezpečená datová sada nebo datová tabulka v serializovatelném typu

CA2354: Nezabezpečená datová sada nebo datová tabulka v deserializovaném grafu objektů může být zranitelná vůči útokům vzdáleného spuštění kódu.

CA2355: Nezabezpečená datová sada nebo datová tabulka v deserializovaném grafu objektu

CA2361: Ujistěte se, že vstup DataSet.ReadXml() je důvěryhodný.

CA2362: Nebezpečná datová sada nebo datová tabulka v automaticky generovaném serializovatelném typu může být zranitelná vůči útokům vzdáleného spuštění kódu