protobuf获取一些数据的安全性如何?

时间:2017-06-28 10:02:32

标签: protocol-buffers

  1. 如果没有任何加密,如果收件人具有序列化的Protobuf文件但没有生成的Protobuf类(他们无法访问定义其结构的.proto文件),是否可以他们从二进制文件中获取Protobuf文件中的任何数据?

  2. 如果他们有权访问.proto文件的一部分(例如,文件中只有一个相关的message),他们可以从整个文件中获取部分数据,同时跳过其他文件未知的部分?

2 个答案:

答案 0 :(得分:3)

  1. 是的,绝对的; protoc工具可以为此提供帮助(请参阅:--decode_raw),https://protogen.marcgravell.com/decode也是如此 - 因此不应将其视为"安全"在所有
  2. 是的,绝对 - 这是协议中内置的关键部分,允许消息可扩展,以便他们可以解码他们理解的位,忽略或只是存储(用于往返或"扩展& #34;字段)他们不理解的位
  3. protobuf不是安全设备;对于拥有正确工具的人来说,它就像xml或json一样可读,但有一个小问题是如何来解释某些值;但是:你可以推断,猜测和逆向工程

答案 1 :(得分:0)

好的,我找到了这个页面https://developers.google.com/protocol-buffers/docs/encoding

该消息丢弃所有名称,只是一对键号和值。生成的类可能会为安全读取这些数据提供一些保护,并且无法读取未知数据。 (果然因为生成的类是从已知结构生成的,/** * @Assert\Expression( * "this not in this.getRelatedProducts().toArray()", * message="Product cannot be in relation with itself" * ) */ protected $relatedProducts; /** * @Assert\Expression( * "this not in this.getProductsInRelation().toArray()", * message="Product cannot be in relation with itself" * ) */ protected $productsInRelation; 文件)

但如果我是攻击者,我可以引用Encoding页面并尝试找出二进制文件中的哪个区域对应于哪些数据。例如,在更改某些数据后,很容易发现varint。然后继续编写我自己的.proto文件来攻击这个未知数据,甚至是可以选择性地读取部分二进制文件的自定义二进制阅读器。