Envoy 访问日志格式验证

Envoy access logs format validation

我们正在使用特使访问日志 https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage ,特使是否验证传递给访问日志的字段,例如字段格式。

我出于基本安全原因要求它验证如果我使用例如 %REQ(:METHOD) 我会得到一个真正的 http 方法,如 get post 等,而不是像 foo。或者 [%START_TIME%] 是时间格式,我不会得到其他东西...

我觉得跟这个特使代码有关

https://github.com/envoyproxy/envoy/blob/24bfe51fc0953f47ba7547f02442254b6744bed6/source/common/access_log/access_log_impl.cc#L54

我问它是因为我们正在将访问日志中的数据发送到另一个系统,并且我们想验证数据是否符合访问日志中的定义,并且从安全角度来看没有人会更改它。

喜欢ip是真实ip格式,path是路径格式,url是url格式

我不确定我是否理解问题。 Envoy 在生成这些日志时无需验证任何内容。 Envoy 是 HTTP 代理,它接收请求并根据配置执行一些 routing/rewriting/auth/drop/.. 操作(如果我们谈论的是 istio,则由 virtualservice / destinationrule / envoyfilter 配置)。执行操作后,它会生成日志条目并在字段中填写有关原始请求和所采取操作的详细信息。

也没有像 'real' 那样的 http 方法。 HTTP 方法只是一个字符串,它可以包含任何值。 Envoy 只是位于客户端和应用程序之间并传递请求的代理(除非您明确配置它,即删除一些方法)。

这取决于接收方法的应用程序如何处理。 GET/POST/HEAD 通常与标准 HTTP 和静态页面相关联。 PUT/DELETE/PATCH 用于 REST API。但是没有什么能阻止您开发接受 'FOOBAR' 方法并在其上运行一些代码的应用程序。