Fastjson开启安全模式5种方法(VIP典藏版)

1、AutoType

fastjson漏洞和fastjson中的AutoType特性有关,后续每个版本的升级中大多关于AutoType的升级。

1.2.59发布,增强AutoType打开时的安全性 fastjson

1.2.60发布,增加了AutoType黑名单,修复拒绝服务安全问题 fastjson

1.2.61发布,增加AutoType安全黑名单 fastjson

1.2.62发布,增加AutoType黑名单、增强日期反序列化和JSONPath fastjson

1.2.66发布,Bug修复安全加固,并且做安全加固,补充了AutoType黑名单 fastjson

1.2.67发布,Bug修复安全加固,补充了AutoType黑名单 fastjson

1.2.68发布,支持GEOJSON,补充了AutoType黑名单。(引入一个safeMode的配置,配置safeMode后,无论白名单和黑名单,都不支持autoType。) fastjson

1.2.69发布,修复新发现高危AutoType开关绕过安全漏洞,补充了AutoType黑名单 fastjson

1.2.70发布,提升兼容性,补充了AutoType黑名单

1.2.83发布,修复在特定场景下可以绕过 AutoType 关闭限制的漏洞

2、AutoType是谁-为啥使用-为啥出错

http://www.ecsoon.com/web/1/165900.html

3、目前已升级至1.2.83

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.83</version>
    </dependency>

二、打开SafeMode功能

==============

在1.2.68之后的版本,在1.2.68版本中,fastjson增加了safeMode的支持。safeMode打开后,完全禁用autoType。所有的安全修复版本sec10也支持SafeMode配置。

以下几种方式配置SafeMode,如下:

1. 在代码中配置

ParserConfig.getGlobalInstance().setSafeMode(true);

public class DemoApplication {

public static void main(String[] args) {
    ParserConfig.getGlobalInstance().setSafeMode(true);
    SpringApplication.run(DemoApplication.class, args);
}

}

  • 注意,如果使用new ParserConfig的方式,需要注意单例处理,否则会导致低性能full gc。

2. 加上JVM启动参数

-Dfastjson.parser.safeMode=true 

如果有多个包名前缀,用逗号隔开

3. 通过fastjson.properties文件配置。

通过类路径的fastjson.properties文件来配置,配置方式如下:

fastjson.parser.safeMode=true

4. safeMode场景如何做autoType

在1.2.68之后的版本,提供了AutoTypeCheckHandler扩展,可以自定义类接管autoType, 通过ParserConfig#addAutoTypeCheckHandler方法注册。

// com.alibaba.fastjson.parser.ParserConfig.AutoTypeCheckHandler

/**
 * @since 1.2.68
 */
public interface AutoTypeCheckHandler {
    Class<?> handler(String typeName, Class<?> expectClass, int features);
}
// com.alibaba.fastjson.parser.ParserConfig#addAutoTypeCheckHandler

5. 怎么判断是否用到了autoType

看序列化的代码中是否用到了SerializerFeature.WriteClassName

JSON.toJSONString(obj, SerializerFeature.WriteClassName); // 这种使用会产生@type

6. 使用JSONType.autoTypeCheckHandler

在fastjson 1.2.71版本中,提供了通过JSONType配置autoTypeCheckHandler的方法,比如:

public class JSONTypeAutoTypeCheckHandlerTest extends TestCase {

public void test_for_checkAutoType() throws Exception {
    Cat cat = (Cat) JSON.parseObject("{\"@type\":\"Cat\",\"catId\":123}", Animal.class);
    assertEquals(123, cat.catId);
}
@JSONType(autoTypeCheckHandler = MyAutoTypeCheckHandler.class)
public static class Animal {
}
public static class Cat extends Animal {
    public int catId;
}
public static class Mouse extends Animal {
}
public static class MyAutoTypeCheckHandler implements ParserConfig.AutoTypeCheckHandler {
    public Class<?> handler(String typeName, Class<?> expectClass, int features) {
        if ("Cat".equals(typeName)) {
            return Cat.class;
        }
        if ("Mouse".equals(typeName)) {
            return Mouse.class;
        }
        return null;
    }
}
fastjson安全模式可以通过以下几方式进行设置。首先,可以在代码中配置`ParserConfig.getGlobalInstance().setSafeMode(true)`来开启安全模式。例如,在应用程序的入口处添加以下代码: ```java public class DemoApplication { public static void main(String\[\] args) { ParserConfig.getGlobalInstance().setSafeMode(true); SpringApplication.run(DemoApplication.class, args); } } ``` 需要注意的是,如果使用`new ParserConfig`的方式,需要注意单例处理,否则可能会导致性能下降和内存泄漏。 另外一方式是通过JVM启动参数来设置安全模式,可以在启动时加上`-Dfastjson.parser.safeMode=true`参数来开启安全模式。这样在应用程序运行时,fastjson会自动启用安全模式。 需要注意的是,安全模式开启会完全禁用autoType功能,确保了fastjson在反序列化时不会受到恶意代码的攻击。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Fastjson开启安全模式5方法VIP典藏版)](https://blog.csdn.net/libusi001/article/details/117710826)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [fastjson 安全漏洞](https://blog.csdn.net/regrethh/article/details/107381977)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值