Änderungen angekündigt am 4. Dezember 2024

Änderungen für Protocol Buffers angekündigt am 4. Dezember 2024.

Wir planen, die Protobuf Debug-APIs für C++ (einschließlich Protobuf AbslStringify, proto2::ShortFormat, proto2::Utf8Format, Message::DebugString, Message::ShortDebugString, Message::Utf8DebugString) in v30 zu ändern, um sensible Felder, die mit debug_redact annotiert sind, zu schwärzen. Die Ausgaben dieser APIs enthalten ein prozessspezifisches zufälliges Präfix und sind daher nicht mehr von Protobuf TextFormat Parsers parsierbar.

Motivation

Derzeit geben Protobuf Debug-APIs jedes Feld in einem Proto in menschenlesbare Formate aus. Dies kann zu Datenschutzverletzungen führen, bei denen Entwickler versehentlich Protobuf-Debug-Ausgaben protokollieren, die sensible Felder enthalten.

Wie man sensible Felder annotiert

Es gibt zwei Möglichkeiten, Felder als sensibel zu markieren

  • Ein Feld direkt mit der Feldoption debug_redact = true markieren.

    message Foo {
      optional string secret = 1 [debug_redact = true];
    }
    
  • Wenn Sie bereits eine Feldannotation vom Typ Enum durch Erweiterung von proto2.FieldOptions definiert haben und bestimmte Werte dieser Annotation verwendet werden, um Felder zu annotieren, die geschwärzt werden sollen, können Sie diese Werte mit debug_redact = true annotieren. Alle Felder, die mit solchen Werten annotiert wurden, werden geschwärzt.

    package my.package;
    
    extend proto2.FieldOptions {
      # The existing field annotation
      optional ContentType content_type = 1234567;
    };
    
    enum ContentType {
      PUBLIC = 0;
      SECRET = 1 [debug_redact = true];
    };
    
    message Foo {
      # will not be redacted
      optional string public_info = 1 [
        (my.package.content_type) = PUBLIC
      ];
      # will be redacted
      optional string secret = 1 [
        (my.package.content_type) = SECRET
      ];
    }
    

Neues Debug-Format

Im Vergleich zum bestehenden Debug-Format weist das neue Debug-Format zwei Hauptunterschiede auf

  • Die mit debug_redact annotierten sensiblen Felder werden in den Ausgabeformaten automatisch geschwärzt
  • Die Ausgabeformate enthalten ein prozessspezifisches zufälliges Präfix, wodurch sie nicht mehr von TextFormat-Parsern parsierbar sind.

Beachten Sie, dass die zweite Änderung unabhängig davon gilt, ob das Proto sensible Felder enthält oder nicht, was sicherstellt, dass jede Debug-Ausgabe unabhängig vom Proto-Inhalt immer nicht deserialisierbar ist.