CA2315:請勿使用不安全的還原序列化程式 ObjectStateFormatter
屬性 | 值 |
---|---|
規則識別碼 | CA2315 |
標題 | 請勿使用不安全的還原序列化程式 ObjectStateFormatter |
類別 | 安全性 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 8 中啟用 | No |
原因
System.Web.UI.ObjectStateFormatter已呼叫或參考還原序列化方法。
檔案描述
還原序列化未受信任資料時,不安全的還原序列化程式會易受攻擊。 攻擊者可以修改序列化的資料,以包含非預期的型別,以插入具有惡意副作用的物件。 例如,對不安全還原序列化程式的攻擊可能會在基礎作業系統上執行命令、透過網路通訊或刪除檔案。
此規則會 System.Web.UI.ObjectStateFormatter 尋找還原序列化方法呼叫或參考。
如何修正違規
可能的話,請改用安全的序列化程式,而且 不允許攻擊者指定任意類型來還原序列化 。 一些更安全的序列化套裝程式括:
- System.Runtime.Serialization.DataContractSerializer
- System.Runtime.Serialization.Json.DataContractJsonSerializer
- System.Web.Script.Serialization.JavaScriptSerializer - 永不使用 System.Web.Script.Serialization.SimpleTypeResolver 。 如果您必須使用類型解析程式,請將還原序列化類型限制為預期的清單。
- System.Xml.Serialization.XmlSerializer
- Newtonsoft Json.NET - 使用 TypeNameHandling.None。 如果您必須為 TypeNameHandling 使用另一個值,請使用自訂 ISerializationBinder,將還原序列化類型限制為預期的清單。
- 通訊協定緩衝區
讓序列化的資料防竄改。 序列化之後,以密碼編譯方式簽署序列化的資料。 還原序列化之前,請先驗證密碼編譯簽章。 保護密碼編譯金鑰,避免洩漏金鑰,並設計金鑰輪替。
隱藏警告的時機
如果下列狀況,可以放心地隱藏此規則的警告:
- 您知道輸入是受信任的。 請考慮應用程式的信任界限和資料流程可能會隨著時間而變更。
- 您已在如何修正違規 中 採取其中一項預防措施。
虛擬程式碼範例
違規
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