.NET 9 - BinaryFormatter移除
1.简单介绍
.NET 9 SDK正式版已经发布, 下载地址是.NET9
同时.NET Conf 2024 大会已经从2024-11-13开始了,感觉Aspire和AI的内容相对挺多的,主题分享演示时候打开的网站大部分都是Blazor制作的。
这次.NET Conf 2024老师也再次说明了一下,
BinarryFormatter is inherely insecure, stop using it
note, BinaryFormatter 存在remote code execution的安全问题
BinaryFormatter 从.NET8开始,已经被标记为Obsolete。.NET9开始已经把BinaryFormatter移除
这边简单记录一下BinaryFormatter在.NET8和.NET9运行的情况
2.具体说明
假定有一个Person类
2.1 .NET8中的BinaryFormatter
2.1.1 修改项目配置文件前
在Visual Studio中编写序列化的代码,发现BinaryFormatter有如下标记
表示BinaryFormatter已经Obsolete了
直接编译代码,是报错的。
2.1.2 修改项目配置文件
这时如果想让代码编译通过且运行正常,需要在项目文件中加上如下配置
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
加上上述的配置后,BinaryFormatter的状态如下,并且编译不会报错,但是有Obsolete警告出现
note, 修改配置之后,项目能运行了,不过BinaryFormatter不建议使用
2.2 .NET 9 的中BinaryFormatter
2.2.1 修改项目配置文件前
未修改项目配置文件时候和.NET8一样的, 编译有报错
2.2.2 修改项目配置文件
如果要恢复正常运行,则需要修改项目配置文件,
1)需要加上配置
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
2)并且安装nuget package(insecure) - System.Runtime.Serialization.Formatters
如果不安装package,运行项目会出现下错误,
修改后的配置如下图所示,
修改了上面两个配置之后,再次编译项目,发现能编译通过,
不过有BinaryFormatter Obsolete的警告出现
下面是代码编译之后的图片
note, 修改配置之后,项目能运行了,不过BinaryFormatter不建议使用
3.总结
本文简单尝试了一下BinaryFormatter在.NET8和.NET9中的状态。正常项目中,不建议使用。
本文如果哪里有错误的地方,麻烦告之,谢谢谢谢!