forked from envoyproxy/envoy
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
API for Unified Header Validators (envoyproxy#21172)
API for Unified Header Validators Signed-off-by: Yan Avlasov <[email protected]>
- Loading branch information
1 parent
dc07116
commit e569ce0
Showing
23 changed files
with
692 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
9 changes: 9 additions & 0 deletions
9
api/envoy/extensions/http/header_validators/envoy_default/v3/BUILD
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# DO NOT EDIT. This file is generated by tools/proto_format/proto_sync.py. | ||
|
||
load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package") | ||
|
||
licenses(["notice"]) # Apache 2 | ||
|
||
api_proto_package( | ||
deps = ["@com_github_cncf_udpa//udpa/annotations:pkg"], | ||
) |
120 changes: 120 additions & 0 deletions
120
api/envoy/extensions/http/header_validators/envoy_default/v3/header_validator.proto
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
syntax = "proto3"; | ||
|
||
package envoy.extensions.http.header_validators.envoy_default.v3; | ||
|
||
import "google/protobuf/wrappers.proto"; | ||
|
||
import "udpa/annotations/status.proto"; | ||
|
||
option java_package = "io.envoyproxy.envoy.extensions.http.header_validators.envoy_default.v3"; | ||
option java_outer_classname = "HeaderValidatorProto"; | ||
option java_multiple_files = true; | ||
option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/http/header_validators/envoy_default/v3;envoy_defaultv3"; | ||
option (udpa.annotations.file_status).package_version_status = ACTIVE; | ||
|
||
// [#protodoc-title: Envoy's default Header Validator config] | ||
|
||
// This extension validates that HTTP request and response headers are well formed according to respective RFCs. | ||
// | ||
// #. HTTP/1 header map validity according to `RFC 7230 section 3.2 <https://datatracker.ietf.org/doc/html/rfc7230#section-3.2>`_ | ||
// #. Syntax of HTTP/1 request target URI and response status | ||
// #. HTTP/2 header map validity according to `RFC 7540 section 8.1.2 <https://datatracker.ietf.org/doc/html/rfc7540#section-8.1.2>`_ | ||
// #. Syntax of HTTP/2 pseudo headers | ||
// #. HTTP/3 header map validity according to `draft standard <https://datatracker.ietf.org/doc/html/draft-ietf-quic-http-34>`_ | ||
// #. Syntax of HTTP/3 pseudo headers | ||
// #. Syntax of Content-Length and Transfer-Encoding | ||
// #. Validation of HTTP/1 requests with both ``Content-Length`` and ``Transfer-Encoding`` headers | ||
// #. Normalization of the URI path according to `Normalization and Comparison <https://datatracker.ietf.org/doc/html/rfc3986#section-6>`_ | ||
// without `case normalization <https://datatracker.ietf.org/doc/html/rfc3986#section-6.2.2.1>`_ | ||
// | ||
message HeaderValidatorConfig { | ||
message UriPathNormalizationOptions { | ||
// Determines the action for requests that contain ``%2F``, ``%2f``, ``%5C`` or ``%5c`` sequences in the URI path. | ||
// This operation occurs before URL normalization and the merge slashes transformations if they were enabled. | ||
enum PathWithEscapedSlashesAction { | ||
// Default behavior specific to implementation (i.e. Envoy) of this configuration option. | ||
// Envoy, by default, takes the ``KEEP_UNCHANGED`` action. | ||
// NOTE: the implementation may change the default behavior at-will. | ||
IMPLEMENTATION_SPECIFIC_DEFAULT = 0; | ||
|
||
// Keep escaped slashes. | ||
KEEP_UNCHANGED = 1; | ||
|
||
// Reject client request with the 400 status. gRPC requests will be rejected with the ``INTERNAL`` (13) error code. | ||
// The ``http#.downstream_rq_failed_path_normalization`` counter is incremented for each rejected request. | ||
REJECT_REQUEST = 2; | ||
|
||
// Unescape ``%2F`` and ``%5C`` sequences and redirect the request to the new path if these sequences were present. | ||
// The redirect occurs after path normalization and merge slashes transformations if they were configured. | ||
// NOTE: gRPC requests will be rejected with the ``INTERNAL`` (13) error code. | ||
// This option minimizes possibility of path confusion exploits by forcing request with unescaped slashes to | ||
// traverse all parties: downstream client, intermediate proxies, Envoy and upstream server. | ||
// The ``http#.downstream_rq_redirected_with_normalized_path`` counter is incremented for each | ||
// redirected request. | ||
UNESCAPE_AND_REDIRECT = 3; | ||
|
||
// Unescape ``%2F`` and ``%5C`` sequences. | ||
// Note: this option should not be enabled if intermediaries perform path based access control as | ||
// it may lead to path confusion vulnerabilities. | ||
UNESCAPE_AND_FORWARD = 4; | ||
} | ||
|
||
// Should paths be normalized according to RFC 3986? | ||
// This operation overwrites the original request URI path and the new path is used for processing of | ||
// the request by HTTP filters and proxied to the upstream service. | ||
// Envoy will respond with 400 to requests with malformed paths that fail path normalization. | ||
// The default behavior is to normalize the path. | ||
// This value may be overridden by the runtime variable | ||
// :ref:`http_connection_manager.normalize_path<config_http_conn_man_runtime_normalize_path>`. | ||
// See `Normalization and Comparison <https://datatracker.ietf.org/doc/html/rfc3986#section-6>`_ | ||
// for details of normalization. | ||
// Note that Envoy does not perform | ||
// `case normalization <https://datatracker.ietf.org/doc/html/rfc3986#section-6.2.2.1>`_ | ||
// URI path normalization can be applied to a portion of requests by setting the | ||
// ``envoy_default_header_validator.path_normalization`` runtime value. | ||
bool skip_path_normalization = 1; | ||
|
||
// Determines if adjacent slashes in the path are merged into one. | ||
// This operation overwrites the original request URI path and the new path is used for processing of | ||
// the request by HTTP filters and proxied to the upstream service. | ||
// Setting this option to true will cause incoming requests with path ``//dir///file`` to not match against | ||
// route with ``prefix`` match set to ``/dir``. Defaults to ``false``. Note that slash merging is not part of | ||
// `HTTP spec <https://datatracker.ietf.org/doc/html/rfc3986>`_ and is provided for convenience. | ||
// Merging of slashes in URI path can be applied to a portion of requests by setting the | ||
// ``envoy_default_header_validator.merge_slashes`` runtime value. | ||
bool skip_merging_slashes = 2; | ||
|
||
// The action to take when request URL path contains escaped slash sequences (``%2F``, ``%2f``, ``%5C`` and ``%5c``). | ||
// This operation may overwrite the original request URI path and the new path is used for processing of | ||
// the request by HTTP filters and proxied to the upstream service. | ||
PathWithEscapedSlashesAction path_with_escaped_slashes_action = 3; | ||
} | ||
|
||
message Http1ProtocolOptions { | ||
// Allows Envoy to process HTTP/1 requests/responses with both ``Content-Length`` and ``Transfer-Encoding`` | ||
// headers set. By default such messages are rejected, but if option is enabled - Envoy will | ||
// remove the ``Content-Length`` header and process the message. | ||
// See `RFC7230, sec. 3.3.3 <https://datatracker.ietf.org/doc/html/rfc7230#section-3.3.3>`_ for details. | ||
// | ||
// .. attention:: | ||
// Enabling this option might lead to request smuggling vulnerabilities, especially if traffic | ||
// is proxied via multiple layers of proxies. | ||
bool allow_chunked_length = 1; | ||
} | ||
|
||
Http1ProtocolOptions http1_protocol_options = 1; | ||
|
||
// The URI path normalization options. | ||
// By default Envoy normalizes URI path using the default values of the :ref:`UriPathNormalizationOptions | ||
// <envoy_v3_api_msg_extensions.http.header_validators.envoy_default.v3.HeaderValidatorConfig.UriPathNormalizationOptions>`. | ||
// URI path transformations specified by the ``uri_path_normalization_options`` configuration can be applied to a portion | ||
// of requests by setting the ``envoy_default_header_validator.uri_path_transformations`` runtime value. | ||
// Caution: disabling path normalization may lead to path confusion vulnerabilities in access control or incorrect service | ||
// selection. | ||
UriPathNormalizationOptions uri_path_normalization_options = 2; | ||
|
||
// Restrict HTTP methods to these defined in the `RFC 7231 section 4.1 <https://datatracker.ietf.org/doc/html/rfc7231#section-4.1>`_ | ||
// Envoy will respond with 400 to requests with disallowed methods. | ||
// By default methods with arbitrary names are accepted. | ||
bool restrict_http_methods = 3; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
Header Validators | ||
================= | ||
|
||
.. toctree:: | ||
:glob: | ||
:maxdepth: 2 | ||
|
||
../../extensions/http/header_validators/*/v3/* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.