CA5360: Seri durumdan çıkarmada tehlikeli yöntemleri çağırmayın

Özellik Değer
Kural Kimliği CA5360
Başlık Serileştirme sırasında güvensiz metotlar çağırmayı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

Serileştirme sırasında aşağıdaki tehlikeli yöntemlerden birini çağırma:

Aşağıdaki gereksinimlerden birini karşılayan herhangi bir yöntem seri durumdan çıkarma geri çağırma işlemi olabilir.

Kural açıklaması

Güvenli olmayan seri durumdan çıkarma, bir uygulamanın mantığını kötüye kullanmak, Hizmet Reddi (DoS) saldırısı uygulamak ve hatta seri durumdan çıkarıldıktan sonra rastgele kod yürütmek için güvenilmeyen veriler kullanıldığında ortaya çıkan bir güvenlik açığıdır. Uygulama, kendi denetimi altındaki güvenilmeyen verileri seri durumdan çıkarırken kötü amaçlı kullanıcıların bu seri durumdan çıkarma özelliklerini kötüye kullanmaları sık sık mümkündür. Özellikle deseriyalizasyon sürecinde tehlikeli yöntemleri kullanın. Güvenli olmayan seri durumdan çıkarma saldırılarının başarılı olması, saldırganın DoS saldırıları, kimlik doğrulama atlamaları ve uzaktan kod yürütme gibi saldırıları gerçekleştirmesine olanak sağlayabilir.

İhlalleri düzeltme

Otomatik olarak çalışan seri durumdan çıkarma geri çağrı yöntemlerinden bu tehlikeli yöntemleri kaldırın. Tehlikeli yöntemleri yalnızca girişi doğruladıktan sonra çağırın.

Uyarıların ne zaman bastırılması gerekiyor?

Şu durumda bu kuralı gizlemek 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.
  • Serileştirilmiş veriler kurcalamaya karşı dayanıklıdır. 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.
  • Veriler uygulama için güvenli olarak doğrulanır.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

#pragma warning disable CA5360
// The code that's violating the rule is on this line.
#pragma warning restore CA5360

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

[*.{cs,vb}]
dotnet_diagnostic.CA5360.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Sahte kod örnekleri

Ihlal

using System;
using System.IO;
using System.Runtime.Serialization;

[Serializable()]
public class ExampleClass : IDeserializationCallback
{
    private string member;

    void IDeserializationCallback.OnDeserialization(Object sender)
    {
        var sourceFileName = "malicious file";
        var destFileName = "sensitive file";
        File.Copy(sourceFileName, destFileName);
    }
}

Çözüm

using System;
using System.IO;
using System.Runtime.Serialization;

[Serializable()]
public class ExampleClass : IDeserializationCallback
{
    private string member;

    void IDeserializationCallback.OnDeserialization(Object sender)
    {
        var sourceFileName = "malicious file";
        var destFileName = "sensitive file";
        // Remove the potential dangerous operation.
        // File.Copy(sourceFileName, destFileName);
    }
}