CA2351: Asegúrese de que la entrada de DataSet.ReadXml() sea de confianza
Propiedad | Value |
---|---|
Identificador de la regla | CA2351 |
Título | Asegúrese de que la entrada de DataSet.ReadXml() sea de confianza |
Categoría | Seguridad |
La corrección interrumpe o no interrumpe | Poco problemático |
Habilitado de forma predeterminada en .NET 9 | No |
Causa
Se llamó al método o se hizo referencia al método DataSet.ReadXml, y no dentro del código generado automáticamente.
Esta regla clasifica el código b generado automáticamente:
- Como dentro de un método denominado
ReadXmlSerializable
. - El método
ReadXmlSerializable
tiene un System.Diagnostics.DebuggerNonUserCodeAttribute. - El método
ReadXmlSerializable
está dentro de un tipo que tiene un System.ComponentModel.DesignerCategoryAttribute.
CA2361 es una regla similar para cuando DataSet.ReadXml aparece dentro del código generado automáticamente.
Descripción de la regla
Al deserializar un DataSet con una entrada que no es de confianza, un atacante puede crear una entrada 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.
- 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:
- Sabe 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 CA2351
// The code that's violating the rule is on this line.
#pragma warning restore CA2351
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.CA2351.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.Data;
public class ExampleClass
{
public DataSet MyDeserialize(string untrustedXml)
{
DataSet dt = new DataSet();
dt.ReadXml(untrustedXml);
}
}
Reglas relacionadas
CA2350: Asegurarse de que la entrada de DataTable.ReadXml() sea de confianza
CA2353: Objeto DataSet o DataTable no seguro en un tipo serializable
CA2355: Objeto DataSet o DataTable no seguro en un gráfico de objetos deserializado