Änderungen 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 = truemarkieren.message Foo { optional string secret = 1 [debug_redact = true]; }Wenn Sie bereits eine Feldannotation vom Typ Enum durch Erweiterung von
proto2.FieldOptionsdefiniert haben und bestimmte Werte dieser Annotation verwendet werden, um Felder zu annotieren, die geschwärzt werden sollen, können Sie diese Werte mitdebug_redact = trueannotieren. 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_redactannotierten 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.