CA2315: Güvenli olmayan seri durumdan çıkarıcı ObjectStateFormatter kullanmayın
Özellik | Değer |
---|---|
Kural Kimliği | CA2315 |
Başlık | Güvenli olmayan seri kaldırıcı ObjectStateFormatter kullanmayın |
Kategori | Güvenlik |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Hayır |
Neden
Seri System.Web.UI.ObjectStateFormatter durumdan çıkarma yöntemi çağrıldı veya başvuruldu.
Kural açıklaması
Güvenilmeyen verilerin seri durumdan çıkarılması sırasında güvenli olmayan seri durumdan çıkarıcılar savunmasızdır. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir. Güvenli olmayan bir seri durumdan çıkarıcıya yönelik bir saldırı, örneğin, temel işletim sisteminde komut yürütebilir, ağ üzerinden iletişim kurabilir veya dosyaları silebilir.
Bu kural seri durumdan çıkarma yöntemi çağrılarını veya başvurularını bulur System.Web.UI.ObjectStateFormatter .
İhlalleri düzeltme
Mümkünse, bunun yerine güvenli bir seri hale getirici kullanın ve bir saldırganın seri durumdan çıkarmak için rastgele bir tür belirtmesine izin verme. Bazı daha güvenli serileştiriciler şunlardır:
- System.Runtime.Serialization.DataContractSerializer
- System.Runtime.Serialization.Json.DataContractJsonSerializer
- System.Web.Script.Serialization.JavaScriptSerializer - Hiçbir zaman kullanmayın System.Web.Script.Serialization.SimpleTypeResolver. Tür çözümleyicisi kullanmanız gerekiyorsa seri durumdan çıkarılmış türleri beklenen bir listeyle kısıtlayın.
- System.Xml.Serialization.XmlSerializer
- Newtonsoft Json.NET - TypeNameHandling.None kullanın. TypeNameHandling için başka bir değer kullanmanız gerekiyorsa, seri durumdan çıkarılmış türleri özel bir ISerializationBinder ile beklenen bir listeyle kısıtlayın.
- Protokol Arabellekleri
Serileştirilmiş verilerin kurcalanmaya karşı dayanıklı olmasını sağlayın. Serileştirmeden sonra, serileştirilmiş verileri şifreli olarak imzalayın. Seri durumdan çıkarmadan önce şifreleme imzasını doğrulayın. Şifreleme anahtarının açıklanmasını önleyip anahtar döndürmeleri için tasarım yapma.
Uyarıların ne zaman bastırılması gerekiyor?
Aşağıdakiler durumunda bu kuraldan gelen bir uyarıyı engellemek güvenlidir:
- Girişin güvenilir olduğunu biliyorsunuz. Uygulamanızın güven sınırının ve veri akışlarının zaman içinde değişebileceğini göz önünde bulundurun.
- İhlalleri düzeltme bölümünde yer alan önlemlerden birini aldıysanız.
Sahte kod örnekleri
Ihlal
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