Refuse an image URL whose host is not a host name or IP address (closes #275)
check / check (push) Canceled after 0s
check / check (push) Canceled after 0s
A ? written into the host segment as %3F reached the parser decoded, so cdn.example.com?x=1 passed the allowlist as cdn.example.com, fetched the host's root path with that query, and was cached under its own keys: another unsigned spelling of one upstream request. The host segment is now accepted only as a host name, an IPv4 address or a bracketed IPv6 address, with an optional port, and anything else is refused with 400. An IPv6 address without brackets is now refused instead of needing a signature; a host name outside ASCII is refused, its punycode accepted. Model: opus-5-5
This commit was merged in pull request #285.
This commit is contained in:
@@ -575,7 +575,11 @@ pixa lower-cases the host of a `/v1/image/` URL before anything else uses it, so
|
||||
`CDN.Example.com` is matched, fetched, cached and counted against
|
||||
`upstream_connections_per_host` as `cdn.example.com`. Such a URL whose host has
|
||||
a port, as in `cdn.example.com:8443`, or a `:` with no port, needs a signature
|
||||
even when the host is allowlisted. A host holding `@` is refused with 400.
|
||||
even when the host is allowlisted. The host must be a host name or an IPv4
|
||||
address (letters, digits, hyphens, underscores and dots) or an IPv6 address in
|
||||
brackets, either one optionally followed by `:` and a port. Any other host, such
|
||||
as one holding `@`, or a `?`, `#`, `%`, `\` or space written percent-encoded, is
|
||||
refused with 400.
|
||||
|
||||
### Configuration
|
||||
|
||||
|
||||
Reference in New Issue
Block a user