feat(@angular/ssr): support the standard Forwarded header - #33406
Conversation
ff18569 to
fdb4c43
Compare
There was a problem hiding this comment.
Code Review
This pull request adds support for parsing and validating the standard RFC 7239 Forwarded header in Angular SSR, prioritizing it over standard and x-forwarded-* headers when trusted. The review feedback highlights a critical issue in parseForwardedHeader where splitting the header value by semicolons blindly fails if a quoted parameter value contains a semicolon. The reviewer suggests using a robust regular expression to parse the parameters correctly and adding a corresponding test case to cover this scenario.
This commit adds support for the standard RFC 7239 `Forwarded` header in the Angular SSR request parsing and validation layers. Previously, only non-standard `x-forwarded-*` headers were supported for resolving proxy-forwarded protocols, hosts, and ports. With this change: - A new `parseForwardedHeader` utility is added to parse standard `Forwarded` header parameters (such as `host` and `proto`), correctly handling quoted values and escaped characters. - In `createRequestUrl`, if the `Forwarded` header is trusted (via `trustProxyHeaders` configuration), its `host` and `proto` parameters are extracted and take precedence over corresponding `x-forwarded-host` and `x-forwarded-proto` headers. - Request validation is updated to verify the validity of `Forwarded` host and proto parameters. - Request sanitization is updated to scrub or retain the `Forwarded` header based on the configured trusted proxy headers. Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Forwarded
fdb4c43 to
9b93c32
Compare
|
This PR was merged into the repository. The changes were merged into the following branches:
|
Update the security guide to document that the Angular SSR request handling pipeline now supports and validates the standard RFC 7239 `Forwarded` header. Previously, only non-standard `X-Forwarded-*` headers were supported for resolving proxy-forwarded protocols, hosts, and ports. With this update: - The standard `Forwarded` header parameters (such as `host` and `proto`) are validated and take precedence over corresponding `X-Forwarded-*` headers when trusted. - The `trustProxyHeaders` option and `NG_TRUST_PROXY_HEADERS` environment variable can be configured to trust the `Forwarded` header. For more details on the implementation, see the corresponding PR: angular/angular-cli#33406
|
This pull request has been automatically locked due to inactivity. Read more about our automatic conversation locking policy. This action has been performed automatically by a bot. |
This commit adds support for the standard RFC 7239
Forwardedheader in the Angular SSR request parsing and validation layers.Previously, only non-standard
x-forwarded-*headers were supported for resolving proxy-forwarded protocols, hosts, and ports. With this change:parseForwardedHeaderutility is added to parse standardForwardedheader parameters (such ashostandproto), correctly handling quoted values and escaped characters.createRequestUrl, if theForwardedheader is trusted (viatrustProxyHeadersconfiguration), itshostandprotoparameters are extracted and take precedence over correspondingx-forwarded-hostandx-forwarded-protoheaders.Forwardedhost and proto parameters.Forwardedheader based on the configured trusted proxy headers.Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Forwarded