CA2305:请勿使用不安全的反序列化程序 LosFormatter
属性 | 值 |
---|---|
规则 ID | CA2305 |
标题 | 请勿使用不安全的反序列化程序 LosFormatter |
类别 | 安全性 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 9 中默认启用 | 否 |
原因
调用或引用了 System.Web.UI.LosFormatter 反序列化方法。
规则说明
反序列化不受信任的数据时,会对不安全的反序列化程序造成风险。 攻击者可能会修改序列化数据,使其包含非预期类型,进而注入具有不良副作用的对象。 例如,针对不安全反序列化程序的攻击可以在基础操作系统上执行命令,通过网络进行通信,或删除文件。
此规则会查找 System.Web.UI.LosFormatter 反序列化方法调用或引用。
LosFormatter
不安全,无法确保安全。 有关详细信息,请参阅 BinaryFormatter 安全指南。
如何解决冲突
- 改用安全的序列化程序,并且不允许攻击者指定要反序列化的任意类型。 有关详细信息,请参阅首选替代方案。
- 使序列化的数据免被篡改。 序列化后,对序列化的数据进行加密签名。 在反序列化之前,验证加密签名。 保护加密密钥不被泄露,并针对密钥轮换进行设计。
何时禁止显示警告
LosFormatter
不安全,无法确保安全。
伪代码示例
冲突
using System.IO;
using System.Web.UI;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
LosFormatter formatter = new LosFormatter();
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 LosFormatter = New LosFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class