Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CA2326:请勿使用 None 以外的 TypeNameHandling 值

CA2326:请勿使用 None 以外的 TypeNameHandling 值

作者头像
呆呆
发布于 2022-02-27 01:04:55
发布于 2022-02-27 01:04:55
9280
举报
文章被收录于专栏:centosDaicentosDai

规则 ID

CA2326

类别

安全性

修复是中断修复还是非中断修复

非中断

原因

如果满足以下任一条件,则会触发此规则:

引用了 None 以外的 Newtonsoft.Json.TypeNameHandling 枚举值。

将表示非零值的整数值赋给 TypeNameHandling 变量。

规则说明

反序列化不受信任的数据时,不安全的反序列化程序易受攻击。 攻击者可能会修改序列化数据,使其包含非预期类型,进而注入具有不良副作用的对象。 例如,针对不安全反序列化程序的攻击可以在基础操作系统上执行命令,通过网络进行通信,或删除文件。

此规则会查找 None 以外的 Newtonsoft.Json.TypeNameHandling 值。 如果仅希望在指定 Newtonsoft.Json.Serialization.ISerializationBinder 来限制反序列化类型时进行反序列化,请禁用此规则并启用规则 CA2327、CA2328、CA2329 和 CA2330。

如何解决冲突

如果可能,请使用 TypeNameHandling 的 None 值。

使序列化的数据免被篡改。 序列化后,对序列化的数据进行加密签名。 在反序列化之前,验证加密签名。 保护加密密钥不被泄露,并针对密钥轮换进行设计。

限制反序列化的类型。 实现自定义 Newtonsoft.Json.Serialization.ISerializationBinder。 在对 Json.NET 执行反序列化前,请确保在 Newtonsoft.Json.JsonSerializerSettings.SerializationBinder 属性中指定自定义 ISerializationBinder。 在已重写的 Newtonsoft.Json.Serialization.ISerializationBinder.BindToType 方法中,如果类型是非预期类型,会返回 null 或引发异常以停止反序列化。

如果限制反序列化的类型,则可能需要禁用此规则并启用规则 CA2327、CA2328、CA2329 和 CA2330。 规则 CA2327、CA2328、CA2329 和 CA2330 有助于确保在使用 None 以外的 TypeNameHandling值时使用 ISerializationBinder。

何时禁止显示警告

在以下情况下,禁止显示此规则的警告是安全的:

已知输入受到信任。 考虑到应用程序的信任边界和数据流可能会随时间发生变化。

已采取了如何修复冲突的某项预防措施。

伪代码示例

冲突

using Newtonsoft.Json;

public class ExampleClass

{

public JsonSerializerSettings Settings { get; }

public ExampleClass()

{

Settings = new JsonSerializerSettings();

Settings.TypeNameHandling = TypeNameHandling.All; // CA2326 violation.

}

}

Imports Newtonsoft.Json

Public Class ExampleClass

Public ReadOnly Property Settings() As JsonSerializerSettings

Public Sub New()

Settings = New JsonSerializerSettings()

Settings.TypeNameHandling = TypeNameHandling.All ' CA2326 violation.

End Sub

End Class

解决方案

using Newtonsoft.Json;

public class ExampleClass

{

public JsonSerializerSettings Settings { get; }

public ExampleClass()

{

Settings = new JsonSerializerSettings();

// The default value of Settings.TypeNameHandling is TypeNameHandling.None.

}

}

Imports Newtonsoft.Json

Public Class ExampleClass

Public ReadOnly Property Settings() As JsonSerializerSettings

Public Sub New()

Settings = New JsonSerializerSettings()

' The default value of Settings.TypeNameHandling is TypeNameHandling.None.

End Sub

End Class

相关规则

CA2327:不要使用不安全的 JsonSerializerSettings

CA2328:确保 JsonSerializerSettings 是安全的

CA2329:不要使用不安全的配置反序列化 JsonSerializer

CA2330:在反序列化时确保 JsonSerializer 具有安全配置

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CA2327:不要使用不安全的 JsonSerializerSettings
如果 Newtonsoft.Json.JsonSerializerSettings 实例的以下两个条件均为 true,则会触发此规则:
呆呆
2022/02/20
5270
CA2328:确保 JsonSerializerSettings 是安全的
如果 Newtonsoft.Json.JsonSerializerSettings 实例的以下两个条件均可为 true,则会触发此规则:
呆呆
2022/02/20
5950
CA2330:在反序列化时确保 JsonSerializer 具有安全配置
如果传递到反序列化方法或初始化为字段或属性的 Newtonsoft.Json.JsonSerializer 实例满足以下两个条件,则会触发此规则:
呆呆
2022/02/20
5940
CA2329:不要使用不安全的配置反序列化 JsonSerializer
如果传递到反序列化方法或初始化为字段或属性的 Newtonsoft.Json.JsonSerializer 实例满足以下两个条件,则会触发此规则:
呆呆
2022/02/20
7810
CA2315:请勿使用不安全的反序列化程序 ObjectStateFormatter
调用或引用了 System.Web.UI.ObjectStateFormatter 反序列化方法。
用户4268038
2022/02/20
4780
CA2355:反序列化对象图中的不安全 DataSet 或 DataTable
当强制转换的或指定的类型的对象图可能包含 DataSet 或 DataTable 类时,进行反序列化。
呆呆
2022/02/20
6300
从 Newtonsoft.Json 迁移到 System.Text.Json
System.Text.Json 是 .NET Core 3 及以上版本内置的 Json 序列化组件,刚推出的时候经常看到踩各种坑的吐槽,现在经过几个版本的迭代优化,提升了易用性,修复了各种问题,是时候考虑使用 System.Text.Json 了。本文将从使用层面来进行对比。
晓晨
2023/03/08
2.5K0
CA2311:在未先设置 NetDataContractSerializer.Binder 的情况下,请不要反序列化
在未设置 Binder 属性的情况下调用或引用了 System.Runtime.Serialization.NetDataContractSerializer 反序列化方法。
用户4268038
2022/02/20
1.4K0
CA2300:请勿使用不安全的反序列化程序 BinaryFormatte
调用或引用了 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 反序列化方法。
用户4268038
2022/02/20
5280
CA2310:请勿使用不安全的反序列化程序 NetDataContractSerializer
调用或引用了 System.Runtime.Serialization.NetDataContractSerializer 反序列化方法。
用户4268038
2022/02/20
3550
CA2321:请勿使用 SimpleTypeResolver 对 JavaScriptSerializer 进行反序列化
使用 System.Web.Script.Serialization.SimpleTypeResolver 初始化后,调用或引用了 System.Web.Script.Serialization.JavaScriptSerializer 反序列化方法。
用户4268038
2022/02/20
1.3K0
CA2362:自动生成的可序列化类型中不安全的数据集或数据表易受远程代码执行攻击
使用 SerializableAttribute 标记的类或结构包含 DataSet 或 DataTable 字段或属性,但不具有 DesignerCategoryAttribute。
呆呆
2022/02/20
5330
CA2301:在未先设置 BinaryFormatter.Binder
在未设置 Binder 属性的情况下调用或引用了 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 反序列化方法。
用户4268038
2022/02/26
6530
Newtonsoft.Json高级用法
本文介绍了Newtonsoft.Json在.NET框架中的序列化用法,包括数组、List、字典、集合、枚举、Nullable类型、自定义转换、跨语言特性、序列化筛选器和性能优化等。
用户1168362
2018/01/05
3.3K0
Newtonsoft.Json高级用法
安全规则
安全规则可实现更安全的库和应用程序。 这些规则有助于防止程序中出现安全漏洞。 如果禁用其中任何规则,你应该在代码中清除标记原因,并通知开发项目的指定安全负责人。
用户4268038
2022/02/20
2K0
在MVC中使用Json.Net序列化和反序列化Json对象
在.Net的MVC开发中,经常会使用到Json对象,于是,系统提供了JsonResult这个对象,其本质是调用.Net系统自带的Json序列化类JavaScriptSerializer对数据对象进行序列化。但是这个系统自带的Json序列化对象方法没有Json.Net好用,于是打算有些时候用Json.Net替代默认的实现。
深蓝studyzy
2022/06/16
1.4K0
CA2305:请勿使用不安全的反序列化程序 LosFormatter
调用或引用了 System.Web.UI.LosFormatter 反序列化方法。
用户4268038
2022/02/20
3170
.NET性能系列文章二:Newtonsoft.Json vs System.Text.Json
图片来自 Glenn Carstens-Peters[1] Unsplash[2]
InCerry
2022/11/14
1.7K0
CA2351:确保 DataSet.ReadXml() 的输入受信任
调用或引用了 DataSet.ReadXml 方法,并且该方法不在自动生成的代码内。
呆呆
2022/02/20
3980
C# Json序列化工具–Newtonsoft.Json简介和使用
Newtonsoft.Json,是.Net中开源的Json序列化和反序列化工具,官方地址:http://www.newtonsoft.com/json。
全栈程序员站长
2022/11/17
3.6K0
推荐阅读
相关推荐
CA2327:不要使用不安全的 JsonSerializerSettings
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档