Comparteix a través de


CA2356: Tipo DataTable o DataSet no seguro en un gráfico de objetos deserializado web

Propiedad Valor
Identificador de la regla CA2356
Título Tipo DataSet o DataTable inseguro en un gráfico de objetos deserializados en la web
Categoría Seguridad
El arreglo es problemático o no problemático Sin interrupción
Habilitado de forma predeterminada en .NET 10 No
Idiomas aplicables C# y Visual Basic

Causa

Un método con System.Web.Services.WebMethodAttribute o System.ServiceModel.OperationContractAttribute tiene un parámetro que puede hacer referencia a DataSet o DataTable.

Esta regla usa un enfoque diferente a una regla similar, CA2355: Unsafe DataSet or DataTable in deserialized object graph (DataTable o DataSet no seguro en un gráfico de objetos deserializado), y abordará advertencias distintas.

Descripción de la regla

Si se deserializa la entrada que no es de confianza y el gráfico de objetos deserializados contiene DataSet o DataTable, un atacante puede crear una carga malintencionada para realizar un ataque por denegación de servicio. Puede haber vulnerabilidades de ejecución de código remoto desconocidas.

Para obtener más información, vea Guía de seguridad de DataSet y DataTable.

Cómo corregir infracciones

  • Si es posible, use Entity Framework en lugar de DataSet y DataTable.
  • Proteja los datos serializados contra alteraciones. Después de la serialización, firme criptográficamente los datos serializados. Antes de la deserialización, valide la firma criptográfica. Proteja la clave criptográfica para que no se revele y diseñe las rotaciones de clave.

Cuándo suprimir las advertencias

Se puede suprimir una advertencia de esta regla si:

  • Sabes que la entrada es de confianza. Considera que el límite de confianza de la aplicación y los flujos de datos pueden cambiar con el tiempo.
  • Ha tomado una de las precauciones indicadas en Cómo corregir infracciones.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

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

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

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

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Ejemplos de pseudocódigo

Infracción

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: Asegurarse de que la entrada de DataTable.ReadXml() sea de confianza

CA2351: Asegúrese de que la entrada de DataSet.ReadXml() sea de confianza

CA2352: Un objeto DataSet o DataTable no seguro en un tipo serializable puede ser vulnerable a ataques de ejecución de código remoto

CA2353: DataSet o DataTable inseguro en tipo serializable

CA2354: Un objeto DataSet o DataTable no seguro en un gráfico de objetos deserializado puede ser vulnerable a ataques de ejecución de código remoto

CA2355: Objeto DataSet o DataTable no seguro en un gráfico de objetos deserializado

CA2361: Ensure DataSet.ReadXml()'s input is trusted (Asegurar que la entrada de DataSet.ReadXml() sea de confianza)

CA2362: Un DataSet o DataTable inseguro en un tipo serializable generado automáticamente puede ser vulnerable a ataques de ejecución de código remoto