]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: cache: make sure not to cache requests with absolute-uri
authorWilly Tarreau <w@1wt.eu>
Mon, 7 Oct 2019 12:06:34 +0000 (14:06 +0200)
committerWilly Tarreau <w@1wt.eu>
Mon, 7 Oct 2019 12:21:30 +0000 (14:21 +0200)
If a request contains an absolute URI and gets its Host header field
rewritten, or just the request's URI without touching the Host header
field, it can lead to different Host and authority parts. The cache
will always concatenate the Host and the path while a server behind
would instead ignore the Host and use the authority found in the URI,
leading to incorrect content possibly being cached.

Let's simply refrain from caching absolute requests for now, which
also matches what the comment at the top of the function says. Later
we can improve this by having a special handling of the authority.

This should be backported as far as 1.8.

src/cache.c

index 06924cc6f84d5fbc3df1c443c03cc0c2b15ac3e3..d350872b88f6453c68f3d8d4be71cdc2dfee56af 100644 (file)
@@ -1082,8 +1082,8 @@ int sha1_hosturi(struct stream *s)
        chunk_memcat(trash, ctx.value.ptr, ctx.value.len);
 
        sl = http_get_stline(htx);
-       path = http_get_path(htx_sl_req_uri(sl));
-       if (!path.ptr)
+       path = htx_sl_req_uri(sl); // whole uri
+       if (!path.len || *path.ptr != '/')
                return 0;
        chunk_memcat(trash, path.ptr, path.len);