思考gRPC :为什么是protobuf

  • 时间:
  • 浏览:1

protobuf都还后能 生成代码的确怪怪的麻烦,所以会有基于java annotation的方案:

各种序列化库层出不穷,其包含另另一5个 重要的区别:类型信息存倒进哪

事实上的跨语言序列化方案越来越 另另一5个 : protobuf, thrift, json。

下面来看下常见的序列化方案是为什么在处置反序列化漏洞的:

谈到RPC,就处置不了序列化语句题。

以gRPC官方的Demo为例:

protobuf ,腾迅,百度等

这里讨论的是越来越 IDL定义的序列化方案,比如java自带的序列化,hessian, 各种json库。

为哪些在protobuf里并没哪些反序列化问题图片图片?

在生成代码里带上类型信息

这里有另另一5个 生成java序列化漏洞代码的工具:

同样thrift有:

类型信息看起来是另另一5个 小事,但在安全上却会出大问题图片图片,上方会讨论。

不保存类型信息

哪些序列化漏洞的根本意味是:越来越 控制序列化的类型范围

gRPC默认的序列化土办法 是protobuf,意味很简单,以前两者都不 google发明的故事家 的,哈哈。

thrift,小米,美团等

类型信息保存到序列化结果里

通常是在IDL文件里写好package和类名,生成的代码直接都不 了类型信息。比如protobuf, thrift。缺点是都还后能 生成代码,双方都不 知道IDL文件。

在protobuf出来以前,所以断再次冒出新的方案。比如

能都还后能 分为并都不 :

在当初Google开源protobuf时,所以人就期待是否是能把RPC的实现也共同开源出来。没想到最终出来的是gRPC,终于补全了并都不 块。

protobuf把一切都框住了,少了灵活性,自然就少漏洞。

hessian, 阿里用的是被委托人维护的版本,有js/cpp的实现,以前阿里主用java,更多是历史意味。

反序列化漏洞到底是为什么在工作的呢?比较慢直接描述清楚,哪些漏洞都不 很精巧的设计,把多个地方的代码串联起来。能都还后能 参考并都不 demo,跑起来调试下就可是否是直观的印象:

国内或多或少大公司的使用状况:

fastjson

序列化所以把对象转换为二进制数据,反序列化就把二进制数据转换为对象。

Java Serialization

jackson-databind

能都还后能 看到rpc的定义也是写在proto文件里的。实际上gRPC是protobuf的另另一5个 扩展,通过扩展生成gRPC相关的代码。

所以总结下来,要么白名单,要么黑名单。当然黑名单机制越来越 及时更新,业务方得不断升jar包,非常蛋疼。白名单是比较彻底的处置方案。

protobuf的或多或少缺点:

比如java自带的序列化,hessian等。缺点是类型信息冗余。比如RPC里每另另一5个 request都不 带上类型。所以有并都不 常见的RPC优化手段所以两端协商以前,后续的请求不都还后能 再带上类型信息。

protobuf在google 508年公开的,结构使用自然更早。当时速率单位还比较昂贵,现在亲们对速率单位的关注胜过速率单位了。

典型的是各种json序列化库,优点是灵活,缺点是使用的双方都不 知道类型是哪些。当然有或多或少json库会提供或多或少扩展,偷偷把类型信息插入到json里。

解码都还后能 一键复制一份内存,越来越 做原地内存引用的优化

所以多多tcp连接 员不理解为哪些反序列化能都还后能 造成任意代码执行。