mirror of
https://github.com/3proxy/3proxy.git
synced 2026-11-16 06:05:50 +08:00
httpsrv: credentials of an earlier request not inherited by the next
This commit is contained in:
parent
908449e360
commit
cc7274d2b5
@ -1598,6 +1598,14 @@ void * httpsrvchild(struct clientparam *param)
|
||||
r.lasthost = lasthost;
|
||||
param->res = 0;
|
||||
|
||||
/* What the request brought belongs to it alone. A connection
|
||||
can carry a client's request after another's, as a reverse
|
||||
proxy reuses its upstreams, so the credentials and the host
|
||||
of an earlier request decide nothing for this one. */
|
||||
*param->hostname = 0;
|
||||
*param->username = 0;
|
||||
*param->password = 0;
|
||||
|
||||
answered = httpsrv_request(param, &r);
|
||||
handoff = r.handoff;
|
||||
param->climark = -1;
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
"""Authentication and access rules in front of the HTTP server."""
|
||||
|
||||
import base64
|
||||
|
||||
|
||||
def run(t):
|
||||
if not t.skip_unless("httpsrv"):
|
||||
@ -49,3 +51,19 @@ def run(t):
|
||||
|
||||
t.contains(t.http(url + "/echo", auth=("alice", "secret")), "path=/echo",
|
||||
"an authenticated request is dispatched")
|
||||
|
||||
# --- credentials do not outlive the request that carried them ------
|
||||
# A kept connection answers a second request without credentials as
|
||||
# unauthenticated: a reverse proxy reuses its upstreams between
|
||||
# clients, so one client's login must not open another's way in.
|
||||
creds = base64.b64encode(b"alice:secret").decode()
|
||||
text, closed = t.raw_session(srv,
|
||||
f"GET /echo HTTP/1.1\r\nHost: t\r\n"
|
||||
f"Authorization: Basic {creds}\r\n\r\n"
|
||||
f"GET /echo HTTP/1.1\r\nHost: t\r\nConnection: close\r\n\r\n")
|
||||
parts = text.split("HTTP/1.")
|
||||
t.eq(3, len(parts), "the kept connection answers both requests")
|
||||
t.eq(True, parts[1].startswith("1 200"),
|
||||
"the request with credentials is allowed")
|
||||
t.eq(True, parts[2].startswith("0 401"),
|
||||
"the request after it, without credentials, is refused")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user