CA2315: Gebruik geen onveilige deserializer ObjectStateFormatter
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA2315 |
Titel | Gebruik geen onveilige deserializer ObjectStateFormatter |
Categorie | Beveiliging |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Er System.Web.UI.ObjectStateFormatter is een deserialisatiemethode aangeroepen of waarnaar wordt verwezen.
Beschrijving van regel
Onveilige deserializers zijn kwetsbaar wanneer niet-vertrouwde gegevens worden gedeserialiseerd. Een aanvaller kan de geserialiseerde gegevens wijzigen zodat onverwachte typen worden opgenomen om objecten met schadelijke bijwerkingen te injecteren. Een aanval op een onveilig deserializer kan bijvoorbeeld opdrachten uitvoeren op het onderliggende besturingssysteem, communiceren via het netwerk of bestanden verwijderen.
Met deze regel worden aanroepen of verwijzingen naar deserialisatiemethode gevonden System.Web.UI.ObjectStateFormatter .
Schendingen oplossen
Gebruik indien mogelijk een beveiligde serialisatiefunctie en sta een aanvaller niet toe een willekeurig type op te geven dat moet worden gedeserialiseerd. Enkele veiligere serializers zijn:
- System.Runtime.Serialization.DataContractSerializer
- System.Runtime.Serialization.Json.DataContractJsonSerializer
- System.Web.Script.Serialization.JavaScriptSerializer - Nooit gebruiken System.Web.Script.Serialization.SimpleTypeResolver. Als u een type-resolver moet gebruiken, beperkt u gedeserialiseerde typen tot een verwachte lijst.
- System.Xml.Serialization.XmlSerializer
- Newtonsoft Json.NET - TypeNameHandling.None gebruiken. Als u een andere waarde voor TypeNameHandling moet gebruiken, beperkt u gedeserialiseerde typen tot een verwachte lijst met een aangepaste ISerializationBinder.
- Protocol Buffers
Maak de geserialiseerde gegevens manipulatiebestendig. Na serialisatie tekent u de geserialiseerde gegevens cryptografisch. Voordat deserialisatie wordt gedeserialiseerd, valideert u de cryptografische handtekening. Beveilig de cryptografische sleutel tegen openbaarmaking en ontwerp voor sleutelrotaties.
Wanneer waarschuwingen onderdrukken
Het is veilig om een waarschuwing van deze regel te onderdrukken als:
- U weet dat de invoer wordt vertrouwd. Houd er rekening mee dat de vertrouwensgrens en gegevensstromen van uw toepassing na verloop van tijd kunnen veranderen.
- U hebt een van de voorzorgsmaatregelen genomen in Het oplossen van schendingen.
Voorbeelden van pseudocode
Schending
using System.IO;
using System.Web.UI;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
ObjectStateFormatter formatter = new ObjectStateFormatter();
return formatter.Deserialize(new MemoryStream(bytes));
}
}
Imports System.IO
Imports System.Web.UI
Public Class ExampleClass
Public Function MyDeserialize(bytes As Byte()) As Object
Dim formatter As ObjectStateFormatter = New ObjectStateFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class