Les méthodes de sérialisation BinaryFormatter sont obsolètes et interdites dans les applications ASP.NET

Les méthodes Serialize et Deserialize sur BinaryFormatter, Formatter et IFormatter sont désormais obsolètes en tant qu’avertissement. En outre, la sérialisation de BinaryFormatter est interdite par défaut pour les applications ASP.NET.

Notes

Dans .NET 7, les API affectées sont obsolètes en tant qu’erreur. Pour plus d’informations, consultez Les API de sérialisation BinaryFormatter produisent des erreurs du compilateur.

Description de la modification

En raison de vulnérabilités de sécurité dans BinaryFormatter, les méthodes suivantes sont désormais obsolètes et produisent un avertissement au moment de la compilation avec l’IDSYSLIB0011. En outre, dans les applications ASP.NET Core 5.0 et ultérieures, ils lèvent un NotSupportedException, sauf si l’application web dispose de fonctionnalités BinaryFormatter réactivées.

Les méthodes de sérialisation suivantes sont également obsolètes et produisent un avertissement SYSLIB0011, mais n’ont aucun changement de comportement :

Version introduite

5,0

Raison du changement

Ces méthodes sont marquées comme obsolètes dans le cadre d’un effort visant à réduire l’utilisation de BinaryFormatter dans l’écosystème .NET.

  • Arrêtez d’utiliser BinaryFormatter dans votre code. Au lieu de cela, envisagez d’utiliser JsonSerializer ou XmlSerializer. Pour plus d’informations, consultez le Guide de sécurité BinaryFormatter.

  • Vous pouvez supprimer temporairement l’avertissement au moment de la compilation BinaryFormatter, qui est SYSLIB0011. Nous vous recommandons d’évaluer soigneusement votre code pour les risques avant de choisir cette option. Le moyen le plus simple de supprimer les avertissements consiste à entourer le site d’appel individuel de directives #pragma.

    // Now read the purchase order back from disk
    using (var readStream = new FileStream("myfile.bin", FileMode.Open))
    {
        var formatter = new BinaryFormatter();
    #pragma warning disable SYSLIB0011
        return (PurchaseOrder)formatter.Deserialize(readStream);
    #pragma warning restore SYSLIB0011
    }
    

    Vous pouvez également supprimer l’avertissement dans votre fichier projet.

    <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFramework>net5.0</TargetFramework>
      <!-- Disable "BinaryFormatter is obsolete" warnings for entire project -->
      <NoWarn>$(NoWarn);SYSLIB0011</NoWarn>
    </PropertyGroup>
    

    Si vous supprimez l’avertissement dans le fichier projet, l’avertissement est supprimé pour tous les fichiers de code du projet. La suppression SYSLIB0011 ne supprime pas les avertissements provoqués par l’utilisation d’autres API obsolètes.

  • Pour continuer à utiliser BinaryFormatter dans les applications ASP.NET, vous pouvez le réactiver dans le fichier projet. Toutefois, il est fortement recommandé de ne pas le faire. Pour plus d’informations, consultez le Guide de sécurité BinaryFormatter.

    <PropertyGroup>
      <TargetFramework>net5.0</TargetFramework>
      <!-- Warning: Setting the following switch is *NOT* recommended in web apps. -->
      <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
    </PropertyGroup>
    

Pour plus d’informations, consultez Résolution des erreurs d’obsolescence et de désactivation BinaryFormatter.

API affectées

Voir aussi