// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Immutable; using System.Diagnostics.CodeAnalysis; using Analyzer.Utilities; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Diagnostics; using Microsoft.NetCore.Analyzers.Security.Helpers; namespace Microsoft.NetCore.Analyzers.Security { using static MicrosoftNetCoreAnalyzersResources; /// <summary> /// For detecting deserialization with <see cref="T:System.Runtime.Serialization.Formatters.Binary.NetDataContractSerializer"/> when its Binder property is not set. /// </summary> [SuppressMessage("Documentation", "CA1200:Avoid using cref tags with a prefix", Justification = "The comment references a type that is not referenced by this compilation.")] [DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)] public class DoNotUseInsecureDeserializerNetDataContractSerializerWithoutBinder : DoNotUseInsecureDeserializerWithoutBinderBase { internal static readonly DiagnosticDescriptor RealBinderDefinitelyNotSetDescriptor = SecurityHelpers.CreateDiagnosticDescriptor( "CA2311", nameof(NetDataContractSerializerDeserializeWithoutBinderSetTitle), nameof(NetDataContractSerializerDeserializeWithoutBinderSetMessage), RuleLevel.Disabled, isPortedFxCopRule: false, isDataflowRule: true, isReportedAtCompilationEnd: true); internal static readonly DiagnosticDescriptor RealBinderMaybeNotSetDescriptor = SecurityHelpers.CreateDiagnosticDescriptor( "CA2312", nameof(NetDataContractSerializerDeserializeMaybeWithoutBinderSetTitle), nameof(NetDataContractSerializerDeserializeMaybeWithoutBinderSetMessage), RuleLevel.Disabled, isPortedFxCopRule: false, isDataflowRule: true, isReportedAtCompilationEnd: true); protected override string DeserializerTypeMetadataName => WellKnownTypeNames.SystemRuntimeSerializationNetDataContractSerializer; protected override string SerializationBinderPropertyMetadataName => "Binder"; protected override ImmutableHashSet<string> DeserializationMethodNames => SecurityHelpers.NetDataContractSerializerDeserializationMethods; protected override DiagnosticDescriptor BinderDefinitelyNotSetDescriptor => RealBinderDefinitelyNotSetDescriptor; protected override DiagnosticDescriptor BinderMaybeNotSetDescriptor => RealBinderMaybeNotSetDescriptor; } }