ruby对象序列化和反序列化

【漏洞复现】Ruby on Rails 路径穿越与任意文件读取漏洞(CVE-2019-5418) 阅读详情

ruby中使用ruby自身的Marshal类进行对象的序列化和反序列化操作:

class A
    def put_str
        puts "test text"
    end
end

a_s = Marshal.dump(A.new)  #实例化一个A对象,使用Marshal的dump方法进行序列化,序列化后的值如下:
"\x04\bo:\x06A\x00"

Marshal.load(a_s).put_str #反序列化a_s,并调用它的put_str方法,输出“test text”

Marshal支持定义自己的序列化和反序列化方法:

使用Marshal.dump保存对象时, 若该对象中已经定义了`_dump'方法的话, 就直接使用该方法的返回值. `_dump'方法接受limit对递归操作的限制, 将对象变为字符串并返回结果.

若某类的实例中包含`_dump'方法的话, 则该类中必需包含一个名为`_load'的类方法, 它负责读回数据. `_load'在收到一个保存着对象的字符串之后, 必须将它还原为对象.

通常情况下, 实例变量的信息都被保存在marshal data中, 所以不必定义 _dump (但是,若定义了_dump的话, 实例变量的信息就不会被保存下来了). 若您想进行更加灵活的控制 ,或者扩展库中定义的类的实例需要保存除实例变量之外的更多信息时, 可以使用_dump/_load. (例如Time类就定义了_dump/_load)

class Foo
  def initialize(obj)
    p "initialize() called"
    @foo = obj
  end
  def _dump(limit)
    Marshal.dump(@foo, limit)
  end
  def self._load(obj)
    Foo.new(Marshal.load(obj))
  end
end

p Marshal.load(Marshal.dump(Foo.new(['foo', 'bar'])))

=> "initialize() called"
   "initialize() called"
   #<Foo:0x4019eb88 @foo=["foo", "bar"]>
223916_bL9y_2663968.jpg
portSwigger(七)不安全的反序列化 想要搞懂反序列化,必须要看懂序列化之后的内容才能进行修改PHP 对不同类型的数据用不同的字母进行标示,Yahoo 开发网站提供的Using Serialized PHP with Yahoo!Web Services 一文中给出所有的字母标示及其含义:a - arraytrue>>>b:1;d - double整形s - string字符串‘benben’ s:长度:“benben”O - classN - null。 阅读详情

相关推荐

Ruby序列化与分布式对象系统深入解析

本文深入探讨了Ruby中的序列化技术及其在分布式系统中的应用。首先介绍了Ruby的Marshal模块及其自定义序列化策略,然后分析了使用YAML和JSON进行对象序列化的不同方法。接着,文章详细阐述了分布式Ruby(dRuby)的使用,展示了如何通过网络将对象从一个Ruby进程传输到另一个进程。最后,对Ruby的灵活性和动态性进行了反思,提出了对编程语言的深入思考。

weixin_32312889的博客 471

Ruby ERB注入&&反序列化

Ruby ERB注入 现在的Web应用中,许多客户端以及服务器端经常会用到模板。许多模板引擎提供了多种不同的编程语言实现,比如Smarty、Mako、Jinja2、Jade、Velocity、Freemaker以及Twig等模板。作为注入攻击大家族中的一员,模板注入这种攻击形式对不同的目标所造成的影响也有所不同。对于AngularJS而言,模板注入攻击可以达到XSS攻击效果,对于服务器端的注入攻击而言,模板注入攻击可以达到远程代码执行效果。 ERB时Ruby自带的 <% 写逻辑脚本(Ruby语法) %

qq_53142368的博客 1327

Rails-doubletap-RCE:使用路径遍历(CVE-2019-5418)和Ruby对象反序列化(CVE-2019-5420)的Rails 5.2.2上的RCE

Rails doubletap漏洞 使用路径遍历(CVE-2019-5418)和Ruby对象反序列化的RCE on Rails 5.2.2(CVE-2019-5420) 技术分析: CVE-2019-5418- CVE-2019-5420- //hackerone.com/reports/473888 安全部门: CVE-2019-5418- //groups.google.com/forum/#! /rubyonrails-security/pFRKI96Sm8Q CVE-2019-5420- //groups.google.com/forum/#!searchin/ru

【探索安全漏洞】Rails-doubletap-exploit:深入解析与应用指南

????【探索安全漏洞】Rails-doubletap-exploit:深入解析与应用指南???? ????项目简介???? 在现代Web开发的舞台上,Ruby on Rails以其优雅和高效而闻名,但任何框架都不免存在潜在的安全风险。Rails-doubletap-exploit正是为了揭示并利用Rails 5.2.2中两个关键性的安全漏洞——CVE-2019-5418(路径遍历)和CVE-2019-5420(Ruby...

gitblog_00023的博客 565

rails_carrierwave_webp_example:使用CarrierWave和WebP-ffi(libwebp包装器)将图像转换为WebP格式的简单示例

Rails CarrierWave WebP图像编码示例 这是一个简单的Rails应用程序,显示了如何使用CarrierWave和WebP-ffi(用Ruby编写的libwebp包装器)将图像转换为WebP格式。 笔记 如果需要在不使用CarrierWave版本的情况下转换图像,则可以使用相同的方法而无需重写#full_filename方法。 因此,您的上传器将如下所示: class PostImageUploader < CarrierWave :: Uploader :: Base include WebPConverter storage :file process convert_to_webp : [ { quality : 80 , method : 5 } ] def store_dir "uploads/ #{ model . class . t

CVE-2019-2107:CVE-2019-2107

CVE-2019-2107 CVE-2019-2107 CVE-2019-2107-看起来很吓人。 仍要记住Stagefright和PNG错误……。使用CVE-2019-2107,解码器/编解码器可在mediacodec用户下运行,并带有适当的“精心制作”的视频(启用了图块-ps_pps-> i1_tiles_enabled_flag),您可以执行RCE。 受影响的编解码器是HVEC(aka H.265和MPEG-H第2部分)#利用#rce #android #stagefright #cve 更多信息 LineageOS(Android): 02-11 20:18:48.238 260 260 D FFmpegExtractor: ffmpeg detected media content as 'video/hevc' with confidence 0.08 02-11

Ruby开发者必备:Representable对象序列化与反序列化实战指南

Representable是Ruby生态中一款强大的对象映射工具,能够轻松实现Ruby对象与JSON、XML、YAML等文档格式的双向转换。无论是构建API接口、处理配置文件还是实现数据持久化,这款工具都能帮助开发者快速完成对象与文档之间的映射工作,显著提升开发效率。 ## 📦 快速安装Representable 要开始使用Representable,首先需要通过RubyGems安装 gem

gitblog_00550的博客 471

cve_2019_0708_bluekeep.rb

cve_2019_0708的利用poc,需要配合msfconsole使用,实测可以成功。

Ruby对象序列化

Ruby 可以使用Marshal来序列化和反序列化 Marshal.load(Marshal.dump(some_obj)) *这个地方创建的是深拷贝。 另外可以使用YAML来进行对象数据的转化 require 'yaml' YAML::load(some_obj.to_yaml) ...

superbinary的专栏 475

marsha:JS的Ruby Marshal序列化器反序列化器

玛莎 读取/写入Ruby的库中的简单输出。 有多简单? 我使用Marshal.dump序列化了所有内容,并出于某种原因希望使用它与其他lang互操作 这不是给你的。 首先,不要为此使用元帅。 其次,。 我想与以Marshal格式存储简单值的Ruby / Rails应用程序交换数据 现在我们在谈论。 我已经完成了诸如true,false和nil,Fixnums,Floats,仅包含ASCII / latin1字符,数组和哈希值的字符串之类的基础知识。 可以序列化的内容远非详尽无遗。 好,那符合我的需求 用法: var marsha = require ( 'marsha' ) ; 封送处理的数据包含各种不可打印的字符; 您可以提供它作为缓冲区: var buffer = fs . readFileSync ( './data/marshaled' ) ; marsha . load

marshal代理端流程

客户端的MarshalIn、UnMarshalOut处理流程 初始化ProxyEntry入口表 client端请求服务

Ruby JSON

摘要:Ruby内置的json库提供了高效的JSON数据处理功能,支持序列化(JSON.generate/to_json)和反序列化(JSON.parse)。文章详细介绍了JSON的核心概念、基本用法、格式化输出、自定义对象处理及异常捕获,并演示了Web API交互和文件读写场景。注意事项包括编码规范、性能优化和安全性,推荐结合pretty_generate提升可读性。适合开发者快速掌握Ruby中的JSON操作技巧。(150字)

likuoelie的博客 811

深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系

训练整个数据集是epoch、把数据集分为多少小块就是batch,每个小块(batch)多少个数据就是batch_size,整个数据集需要训练多少轮是iteration

qq_42740834的博客 1610

ruby to_yaml 筛选部分不参与序列化

只需要冲定义该对象的 to_yaml_properties 方法, 只返回要序列化的字段就可以了 class A attr_reader :a attr_reader :b def initialize(x,y) @a = x @b = y end end a = A.new(1,3) p a.to_yaml # => "--- !ruby/object:A

猫屋 1159

【原创】SAP/Oracle 集团企业海外全球化实施注意事项: 一带一路本地化 (持续更新)...

ABC集团SAP的系统平台已经扩展到全球一百来个国家和地区,SAP系统平台的全球实施项目中, 当时是需要支持当地的业务和法律法规的合规要求。   当时客户也是缺乏当地的资源以及对当地法律法规和业务实践的了解,需要团队提供了全球化的支持,通过我们全球产品技术专家充分传递了各区域的本地化支持和实践 而且近年来我们发现一些国家和政府,陆续都在推出一些新的税改和合规的要求,接下来基于这些要求,我们全球...

weixin_34024034的博客 1143

deepin搭建samba服务器

一.为什么要用Samba? Samba的主要任务就是实现Linux系统和Windows系统之间的资源共享。二.需要的软件? 我是在deepin上实现的,在终端中使用一下两句命令,就可以安装Samba的软件包 $sudo apt-get install samba //安装samba 三.Samba服务的组成 Samba的核心是两个守护进程smbd和nmbd。当然,它

xbrother123的博客 8598

msgpack-ruby终极指南:如何用二进制序列化提升Ruby应用性能

想要让你的Ruby应用运行更快、数据传输更高效吗?msgpack-ruby正是你需要的**二进制序列化工具**!这个强大的Ruby库实现了MessagePack协议,能够将数据压缩成紧凑的二进制格式,相比传统的JSON格式,**性能提升高达5-10倍**,数据大小减少30-50%!🚀 ## 为什么选择msgpack-ruby?二进制序列化的巨大优势 msgpack-ruby不仅仅是一个简单的

gitblog_00460的博客 756

allegro转AD-(附工具)

本文介绍了将Allegro的.brd文件转换为Altium Designer可用的.alg文件的操作流程。首先需要下载专用转换工具,然后通过运行.bat脚本将.brd文件转换为.alg格式。最后在Altium Designer中使用导入向导完成文件转换,生成可用的PCB设计文件。整个过程简单快捷,只需三个步骤即可实现Allegro到Altium Designer的工程文件转换。

weixin_50120208的博客 1717

Rufus U 盘启动盘制作完整指南:3 个环节写入,双模式一次通过

做一张能用的 U 盘启动盘,全程只有 3 个环节:写入前确认、写入、写入后验证。Rufus(The Reliable USB Formatting Utility)把格式化、引导结构写入、完整性校验收进同一个免安装工具,当前稳定版 4.15(2026-06-30 发布),GPL v3 许可,下载 `rufus.exe` 直接运行。本文先讲最容易选错的分区方案与文件系统决策,再走主线流程,最后给下载

gitblog_00683的博客 370

39、信号流图:解决线性代数方程组的图论方法

本文介绍了信号流图理论在求解线性代数方程组中的应用,重点阐述了Coates方法和Mason方法的原理、步骤及对比分析。通过图论视角,将矩阵运算转化为对有向图结构的分析,利用1-因子、1-阶连接、前向路径和反馈回路等概念,推导出方程组解的拓扑公式。文章结合具体实例演示两种方法的计算过程,并总结其在电路分析、控制系统和通信系统等领域的拓展应用,展示了信号流图理论的直观性与有效性。

pear55的博客 88

手把手教你用ESP32-C3打造智能聊天机器人-立创实战派

本文将详细介绍如何利用立创ESP32-C3开发板,烧录小智AI程序,快速实现一个功能强大的聊天机器人。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 5534

对象序列化类库MsgPack介绍

https://www.cppfans.org/1410.html MessagePack(以下简称MsgPack)一个基于二进制高效的对象序列化类库,可用于跨语言通信。它可以像JSON那样,在许多种语言之间交换结构对象;但是它比JSON更快速也更轻巧。支持Python、Ruby、Java、C/C++等众多语言。比Google Protocol Buffers还要快4倍。 代码

MyDriverC 3615

SAP_FI模块_固定资产期初导入全流程(含导入代码)

SAP 期初导入资产主数据以及金额相关的操作全流程记录,包含了批导程序的代码,以及错误记录

风沙的博客 1405

Ruby 4.0 通用 RCE 反序列化利用链:突破版本限制,深入底层构建

利用链以 `Gem::SpecFetcher` 开头,因 `Marshal.load` 解析该常量会触发 RubyGems 自动加载机制,增加可供利用的类集,后续利用链依赖 `Gem::URI::Generic`、`Gem::RequestSet::Lockfile` 和 `Gem::StubSpecification` 等类。目标系统可写入 `/tmp` 目录。对象作为 `Hash` 的键时,Ruby 会调用其 `hash` 方法,`Marshal.load` 重建哈希表时插入键可触发。

yuyanhome的博客 31

库存管理系统项目部署方案(基于jdk8)

不需要安装到服务器,运维本地安装就行,主要是用来编译前端代码的。构建完成后将dist文件夹复制到服务器内。

程序员诚哥 2576

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: rails content_for和provide传值的区别
下一篇: Rails中单词单复数转换
CSTO
博客等级 码龄17年 3粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值