Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA2315 |
| Başlık | Güvenli olmayan seri kaldırıcı ObjectStateFormatter kullanmayın |
| Kategori | Güvenlik |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
Neden
Bir System.Web.UI.ObjectStateFormatter deserileştirme yöntemi çağrıldı veya referans alındı.
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 System.Web.UI.ObjectStateFormatter seri durumdan çıkarma yöntemi çağrılarını veya başvurularını bulur.
İ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 kriptografik imzayı 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 nasıl düzelteceğiniz konusunda önlemlerden birini aldını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