Skip to content

Commit

Permalink
MINOR: h1: Reject requests if the authority does not match the header…
Browse files Browse the repository at this point in the history
… host

As stated in the RCF7230#5.4, a client must send a field-value for the header
host that is identical to the authority if the target URI includes one. So, now,
by default, if the authority, when provided, does not match the value of the
header host, an error is triggered. To mitigate this behavior, it is possible to
set the option "accept-invalid-http-request". In that case, an http error is
captured without interrupting the request parsing.
  • Loading branch information
capflam committed Oct 14, 2019
1 parent 497ab4f commit 531b83e
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion src/h1.c
Original file line number Diff line number Diff line change
Expand Up @@ -834,8 +834,20 @@ int h1_headers_to_hdr_list(char *start, const char *stop,
}
}
else if (isteqi(n, ist("host"))) {
if (host_idx == -1)
if (host_idx == -1) {
struct ist authority;

authority = http_get_authority(sl.rq.u, 1);
if (authority.len && !isteqi(v, authority)) {
if (h1m->err_pos < -1) {
state = H1_MSG_HDR_L2_LWS;
goto http_msg_invalid;
}
if (h1m->err_pos == -1) /* capture the error pointer */
h1m->err_pos = ptr - start + skip; /* >= 0 now */
}
host_idx = hdr_count;
}
else {
if (!isteqi(v, hdr[host_idx].v)) {
state = H1_MSG_HDR_L2_LWS;
Expand Down

0 comments on commit 531b83e

Please sign in to comment.