fastjson漏洞利用,fastjson再曝重大安全漏洞,严重可导致服务瘫痪
fastjson漏洞利用,fastjson再曝重大安全漏洞,严重可导致服务瘫痪详细介绍
本文目录一览: fastjson再曝重大安全漏洞,严重可导致服务瘫痪
2019年9月5日,fastjson在commit 995845170527221ca0293cf290e33a7d6cb52bf7上提交了旨在修复当字符串中包含\\x转义字符时可能引发OOM的问题的修复。
360CERT 判断该漏洞危害中。影响面较大。攻击者可以通过发送构造好的请求而致使当前线程瘫痪,当发送的恶意请求过多时有可能使业务直接瘫痪。
建议广大用户对自身的业务/产品进行组件自查,确认fastjson版本至少升级到1.2.60
漏洞的关键点在com.alibaba.fastjson.parser.JSONLexerBase#scanString中,当传入json字符串时,fastjson会按位获取json字符串,当识别到字符串为\\x为开头时,会默认获取后两位字符,并将后两位字符与\\x拼接将其变成完整的十六进制字符来处理:
而当json字符串是以\\x结尾时,由于fastjson并未对其进行校验,将导致其继续尝试获取后两位的字符。也就是说会直接获取到\\u001A也就是EOF:
当fastjson再次向后进行解析时,会不断重复获取EOF,并将其写到内存中,直到触发oom错误:
最终效果为:
fastjson < 1.2.60版本
2019-09-03 fastjson提交修补commit
2019-09-05 360CERT发布预警
2019-09-07 周末加班升级!
PS:jackson最近也发布了多个版本进行漏洞修复。
企业网络安全现状分析及对策
企业无时无刻不面临着各种各样的网络安全威胁,无论是不是互联网企业,在这个大时代背景下,所有的企业都离不开网络。虽然在近几年网络安全的发展非常健全但是网络安全的威胁仍然无处不在,从腾讯安全2019至2020年的企业安全威胁报告就可以知道很多目前亟待解决的网络安全问题。
要先了解问题,才能对症下药
企业主要面临着以下十大安全问题
问题一:病毒攻击
有40%的企业每周都要遭遇至少一次的病毒攻击,其中最常见的就是风险类软件、后门远控类木马、感染型病毒,这是企业终端面临最主要的三大威胁。
问题二:企业自身安全防护做得不到位有关
据统计,有79%的企业终端存在未修复的高危流动。其中LNK漏洞补丁安装的比例最高,RTF漏洞补丁安装的比例是最低的,还有74%的机器没有安装补丁,这就带来了非常大的网络安全隐患。
问题三:暴露在公网的服务器被攻击
因技术问题和远程办公的需要,很多企业暴露在公网的服务器被攻击的频率也有升高,这其中远程代码执行攻击、SQL注入、XSS攻击等类型的比例明显提升。
问题四:框架自身带来的问题
框架自身带来的问题也时常发生,特别是开源框架,存在很多的高危漏洞。其中不乏热门的Java开源框架,常用的Jackson框架的漏洞,高性能JSON库Fastjson漏洞、Windows RDS漏洞等。可以看到我们平时经常用到的这么多框架也并不是完全安全的。
问题五:企业资产保护力度不够
非常多的企业资产开放了高危端口,除了22、1900这些常见的端口之外,还有很多邮件服务、数据库服务的专用端口暴露在公网上,给网络攻击提供了非常多的条件。
问题六:漏洞利用、弱口令爆破攻击和文件共享带来了内网病毒的传播风险
利用内网SMB共享服务漏洞传播的“永恒之蓝”依旧是目前的重点。SMB攻击、远程桌面连接爆破和SSH爆破都是最为常见的。其中SSH的爆破也最为广泛。
问题七:病毒持久化驻留
在内网病毒传播之后,更进一步的病毒持久化驻留也成为了新型的传播方式,其中包括常见的注册表相关启动位置及启动文件夹,还有常驻于WMI类属性这几种。
问题八:企业的终端设备没有做好网络安全加固
企业的终端设备没有做好网络安全加固也带来了非常多的风险。企业终端遭受到病毒攻击而失陷之后将会引发信息窃密、敲诈勒索、挖矿木马等一系列安全风险。从2019年开始,针对LoT设备的攻击也越来越频繁。
问题九:金融行业的钓鱼邮件高发
以后门远控为目的的钓鱼邮件占比较多,然后是传播勒索病毒、专业APT组织攻击、信息窃密等几个方面都是19年开始较为高发的钓鱼邮件。
问题十:教育行业变为最受病毒“青睐”的行业
从2019年开始教育行业变为最受病毒“青睐”的行业。在教育、科技、医疗、金融等行业的文件传输方面感染病毒的比例是最高的,这也是因为在传输文件时所做的加固最少。
进入2020年之后,主要的网络安全问题可以归结为五大类
高危漏洞频出、勒索病毒频发、高级可持续威胁攻击APT技术升级、数据泄露问题愈发严重、云安全事件更加频发。
在了解企业自身的网络安全问题后应该要如何应对?
下面是【解决方案】
面对这一系列网络安全问题,企业需要构建自己的安全防线,借助不同类型的网络安全加固产品来针对性地做网络安全的加固处理。针对以上问题,重点在于做好预防,及早发现,及时处理。
越来越多的企业将业务转移到云上,网络攻击面也随之增加。选择网络安全防护产品为企业的产业安全保驾护航是十分必要的。
DDoS防护、等保综合解决方案、高级威胁检测系统、安全运营中心这几款解决方案都是可以帮助企业解决常见网络安全问题的综合解决方案。
更多网络安全加固方面的处理办法和主要产品,企业需要根据自身的情况和业务发展的阶段去选择,具体如何选择,欢迎随时关注并咨询相关行业分析出自身网络问题对症下药。
希望本篇回答可以帮助到你~
json.parseobject()的set方法设置顺序
取出数据库中的字符串通过前端的JSON.parse(str)遍历显示key,value值。到此一个新的要求是要显示的顺序和数据库中保持一致,通过JSON.parse()通常会按照key排序。所以使用JSON.parse失败。
只能手动获取字符串中的key,value值,最好的方式是采用正则,不然也可以采用 replace,replaceALl,split等方法逐步分割在回到如果不需要保持顺序的情况下,使用JSON.parse()遇到了抛出异常的问题,一看数据库中的内容,发现并不是标准的JSON格式,比如这段{name:“张三”,age:12},此时使用JSON.parse便会抛出异常,所以需要改为{“name”:“张三”,age:12} 解决的思路是前端给该字符串补全双引号,不过也可以用JAVA。
思路是通过fastjson库将字符串转换为JSON对象,在转回JSON字符串。这里利用了fastjson对JSON格式要求不严格
在使用fastjson直接将字符串转为JSON对象后在转换回JSON字符串,顺序将保证不了。修改代码这里仅仅对key,value形式,key不带双引号的,value仅仅是字符串(也仅带特殊符号":")的处理,对于嵌套的JSON格式或者value值为时间,数字,其它转义特殊符号还考虑。还有些地方需要完善。
在开发过程中遇到一个问题:服务器经过排序返回后的字符串数据在使用fastjson解析后,数据顺序发生了变化,这个问题也就是:使用fastjson解析数据后导致顺序改变或者说是如何保持String字符串转为json对象时顺序不变
解决方法:
方法一:解析时增加参数不调整顺序(亲测使用有效)
JSONObject respondeBodyJson = JSONObject.parseObject(str, Feature.OrderedField);
方法二:配置有序对象
JSONObject.parseObject(str,LinkedHashMap.class,Feature.OrderedField);
方法三:初始化json对象为有序对象
JSONObject retObj = new JSONObject(true);
方法四:使用Gson解析
JsonObject returnData = new JsonParser().parse(str).getAsJsonObject();
这样生成的json对象就与放入数据时保持一致了
注意:引入的fastjson相关的jar包版本要高于1.2.3,因为Feature.OrderedField是从1.2.3开始的
FastJson 在不关闭循环引用检测的情况下,替换或者消除$ref
在不关闭循环引用检测的情况下,替换或者消除$ref可以考虑下面方法
在生成对象数据时每次new一个全新的对象,保证引用类型地址不同:
Student student= studentService.getStudentById(id);
Student stu= new Student ();
//此处利用工具类进行对象的复制操作,达到填充新new出来的对象的效果
BeanUtils.copyProperties(student,stu);
Jackson序列化&&FastJson序列化API使用
JDK英文文档,墙裂不推荐看中文!!!
ObjectMapper的API文档
1 需要注意的是:
2 Jackson的API: `
3. Jackson提供的注解 Jackson 提供了一系列的注解,方便对 JSON 序列化和反序列化进行控制,下面介绍一些常用的注解:
1. 引入MAVEN依赖:
2. 实体类
3. 测试类:
首先注意的是 JDK1.8 中时间类,采用了一套新的API。
在这里我们采用是 LocalDate 类,若是 User 类中,没有使用注解,那么序列化结果为:
显然,这不是我们预期的 Json 串。并且,我们在反序列化过程中,会出现异常:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of java.time.LocalDate (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (String)"{"name":"小胖","sports":["足球","游泳"],"date":{"year":2019,"month":"MARCH","chronology":{"id":"ISO","calendarType":"iso8601"},"dayOfMonth":27,"dayOfWeek":"WEDNESDAY","dayOfYear":86,"era":"CE","monthValue":3,"leapYear":false}}"; line: 1, column: 43] (through reference chain: com.JsonSerializer.User["date"])
大概意思:就是 LocalDate 的没有参数是 Object 的构造函数。不能实例化对象。
华丽的分割线 SpringBoot的处理
SpringBoot的解决方案:
Java bean的解决方案: 在 Java Bean 中使用注解,就可以进行反序列化和序列化。
执行结果:
FastJson 是性能极好的 JSON 解析器和生成器。
1. FastJson的优点:
2. FastJson的主要类:
1. FastJson的MAVEN依赖:
2. JSON准备:
ARR_JSON格式:
COMPLEX_JSON格式:
使用方式: github的使用文档
1. 通过 TypeReference 处理泛型对象
2. 使用 getType() 可以获取更好的性能。
1. TypeRefrence部分源码分析:
为什么这里的构造方法要是 protected 的,即我们无法直接创建该对象,只能使用匿名类创建 子类 对象。
getGenericSuperclass()的API方法
返回 Class 对象(类,接口,基本数据类型,void)的直接父类的 Type 类型。 如果父类是 parameterized [p?'r?m?t?ra?zd] 类型(也可以理解为 父类是泛型对象 ),那么返回的参数类型是父类的泛型类型。
基本原理:
使用 public static
T parseObject(String text, Class
clazz) 方法,边可完成JSON的反序列化。
1. 特殊JSON反序列化
2. 泛型丢失
我们可以看到,因为返回值需要泛型类型 T 所以我们采用的是 Class
,防止返回Object对象,让用户强转。但需要注意: 这种方式在反序列化的时候,会丢失泛型类型。
方式一:TypeReference
方式二:使用parseArray
我们可以通过这个 API ,完成 Bean 对象转换成 String 类型。 String toJSONString(Object object, SerializerFeature... features)
若是对象的属性只是简单数据类型(基本数据类型,或者String类型)那么可以使用Class方式转化为Object对象。
若是一个对象里面的属性依旧是一个对象,那么我们就可以使用TypeRefrence进行转换。
我们在将JSON转换为对象的时候,就可以保留List
的泛型。即:
参考文章: Java下利用Jackson进行JSON解析和序列化
使用FastJson处理JSON数据
fastjson如何json数组串转换为Object[]时如何指定各个数据项的数据类型
如何构建json串,并将map转为jsonObject对象的三种方式(scala)
众所周知,kafka中存储的数据是经过BASE64加密后的jsonObject,因此从kafka中读取的数据经过base64解码,得到的是json串,利用JSONObect的方法可以对json串进行解析,拿到对应的数据。那么要如何将scala对象或者java对象转换为JsonObject对象或JSONObject对象呢?(注意:JsonObject对象和JSONObject对象不同,调用的API也不一样)
三种转换方式依赖的包源码都是用JAVA编写,所以构建Map对象时完全使用java对象,不会发生错误。构建过程如下:
三种将java对象转换为jsonObject对象的开源包有:
1、google提供的Genson是一个完全的Java和JSON转换的类库,提供了全面的数据绑定、流操作等。基于Apache 2.0协议发布。转换结果为
JsonObject对象。
使用需要先导入Jar包:import com.google.gson.{Gson, JsonParser}
引入依赖:这里选用版本为:2.2.4,具体版本可以根据业务需求选择。
com.google.code.gson
gson
2.2.4
2、Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
导入jar包:import com.alibaba.fastjson.JSON
引入依赖:
com.alibaba
fastjson
1.2.8
3、net.sf.json-lib方式
导入jar包:import net.sf.json.JSONObject
引入依赖:
net.sf.json-lib
json-lib-ext-spring
1.0.2