Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA2356 |
| Název | Nezabezpečená datová sada nebo datová tabulka v grafu deserializovaných objektů webu |
| Kategorie | Zabezpečení |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Ne |
| Příslušné jazyky | C# a Visual Basic |
Příčina
Metoda s System.Web.Services.WebMethodAttribute nebo System.ServiceModel.OperationContractAttribute má parametr, který může odkazovat na DataSet nebo DataTable.
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, pokud deserializovaný objektový graf obsahuje DataSet nebo DataTable, útočník může vytvořit škodlivou datovou část, která provede útok odmítnutí služby. 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.
- Zabezpečte serializovaná data proti neoprávněné manipulaci. Po serializaci kryptograficky podepisujte serializovaná data. Před deserializací ověřte kryptografický podpis. Chraňte kryptografický klíč před zveřejněním a navrhněte 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;
}
}
Související pravidla
CA2350: Ujistěte se, že vstup DataTable.ReadXml() je důvěryhodný.
CA2351: Ujistěte se, že vstup DataSet.ReadXml() je důvěryhodný.
CA2353: Nezabezpečená datová sada nebo datová tabulka v serializovatelném typu
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ý.