You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何全局设置Newtonsoft.Json的MaxDepth参数以修复漏洞?

解决方案:全局统一配置Newtonsoft.Json避免重复代码

针对你的场景(.NET 3.1、多入口点、无法升级Json.NET版本),不需要在每个依赖类的构造函数中重复设置,以下是几种简洁的实现方式:

1. 入口点一次性全局设置

JsonConvert.DefaultSettings是全局静态委托,一旦设置后,所有通过JsonConvert调用的序列化/反序列化操作都会自动使用该配置。你只需要在每个项目的入口点执行一次设置即可:

  • 控制台/桌面应用:在Main方法开头添加代码:
    JsonConvert.DefaultSettings = () => new JsonSerializerSettings { MaxDepth = 128 };
    
  • ASP.NET Core Web项目:在Startup.cs的ConfigureServices或Configure方法中添加上述代码;同时如果项目使用Mvc的Newtonsoft序列化,还需要补充Mvc配置(避免Mvc单独使用默认配置):
    services.AddControllers()
            .AddNewtonsoftJson(options =>
            {
                options.SerializerSettings.MaxDepth = 128;
            });
    

你的仓库有5个入口点,每个入口点只需要添加1-2行代码,完全避免重复。

2. 封装静态初始化类(统一管理配置)

如果担心多个入口点漏配置,可以把初始化逻辑封装到一个公共静态类中,放在所有项目都能引用的公共项目里:

public static class JsonSecuritySettings
{
    static JsonSecuritySettings()
    {
        // 全局设置MaxDepth
        JsonConvert.DefaultSettings = () => new JsonSerializerSettings 
        { 
            MaxDepth = 128 
        };
    }

    // 触发静态构造函数的方法
    public static void ApplySettings() { }
}

然后在每个入口点调用一次:

JsonSecuritySettings.ApplySettings();

这种方式把配置逻辑集中管理,后续如果需要调整其他序列化参数,只需要修改这个类即可。

验证配置生效

设置完成后,可以通过反序列化一个超过128层的嵌套对象来验证:如果抛出JsonReaderException(提示超出最大深度),说明配置生效,漏洞修复完成。

内容的提问来源于stack exchange,提问作者Finesagan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:50:24