mirror of
https://github.com/apache/httpd.git
synced 2025-08-01 16:41:19 +00:00
mod_proxy: Check for space/ctrls in nocanon path/urls before forwarding.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1908827 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@ -164,26 +164,31 @@ static int proxy_http2_canon(request_rec *r, char *url)
|
|||||||
|
|
||||||
path = ap_proxy_canonenc_ex(r->pool, url, (int)strlen(url),
|
path = ap_proxy_canonenc_ex(r->pool, url, (int)strlen(url),
|
||||||
enc_path, flags, r->proxyreq);
|
enc_path, flags, r->proxyreq);
|
||||||
|
if (!path) {
|
||||||
|
return HTTP_BAD_REQUEST;
|
||||||
|
}
|
||||||
search = r->args;
|
search = r->args;
|
||||||
}
|
}
|
||||||
if (search && *ap_scan_vchar_obstext(search)) {
|
|
||||||
/*
|
|
||||||
* We have a raw control character or a ' ' in r->args.
|
|
||||||
* Correct encoding was missed.
|
|
||||||
*/
|
|
||||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10412)
|
|
||||||
"To be forwarded query string contains control "
|
|
||||||
"characters or spaces");
|
|
||||||
return HTTP_FORBIDDEN;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case PROXYREQ_PROXY:
|
case PROXYREQ_PROXY:
|
||||||
path = url;
|
path = url;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
if (path == NULL) {
|
* If we have a raw control character or a ' ' in nocanon path or
|
||||||
return HTTP_BAD_REQUEST;
|
* r->args, correct encoding was missed.
|
||||||
|
*/
|
||||||
|
if (path == url && *ap_scan_vchar_obstext(path)) {
|
||||||
|
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10420)
|
||||||
|
"To be forwarded path contains control "
|
||||||
|
"characters or spaces");
|
||||||
|
return HTTP_FORBIDDEN;
|
||||||
|
}
|
||||||
|
if (search && *ap_scan_vchar_obstext(search)) {
|
||||||
|
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10412)
|
||||||
|
"To be forwarded query string contains control "
|
||||||
|
"characters or spaces");
|
||||||
|
return HTTP_FORBIDDEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (port != def_port) {
|
if (port != def_port) {
|
||||||
|
@ -75,20 +75,27 @@ static int proxy_ajp_canon(request_rec *r, char *url)
|
|||||||
|
|
||||||
path = ap_proxy_canonenc_ex(r->pool, url, strlen(url), enc_path, flags,
|
path = ap_proxy_canonenc_ex(r->pool, url, strlen(url), enc_path, flags,
|
||||||
r->proxyreq);
|
r->proxyreq);
|
||||||
|
if (!path) {
|
||||||
|
return HTTP_BAD_REQUEST;
|
||||||
|
}
|
||||||
search = r->args;
|
search = r->args;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* If we have a raw control character or a ' ' in nocanon path or
|
||||||
|
* r->args, correct encoding was missed.
|
||||||
|
*/
|
||||||
|
if (path == url && *ap_scan_vchar_obstext(path)) {
|
||||||
|
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10418)
|
||||||
|
"To be forwarded path contains control "
|
||||||
|
"characters or spaces");
|
||||||
|
return HTTP_FORBIDDEN;
|
||||||
|
}
|
||||||
if (search && *ap_scan_vchar_obstext(search)) {
|
if (search && *ap_scan_vchar_obstext(search)) {
|
||||||
/*
|
|
||||||
* We have a raw control character or a ' ' in r->args.
|
|
||||||
* Correct encoding was missed.
|
|
||||||
*/
|
|
||||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10406)
|
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10406)
|
||||||
"To be forwarded query string contains control "
|
"To be forwarded query string contains control "
|
||||||
"characters or spaces");
|
"characters or spaces");
|
||||||
return HTTP_FORBIDDEN;
|
return HTTP_FORBIDDEN;
|
||||||
}
|
}
|
||||||
if (path == NULL)
|
|
||||||
return HTTP_BAD_REQUEST;
|
|
||||||
|
|
||||||
if (port != def_port)
|
if (port != def_port)
|
||||||
apr_snprintf(sport, sizeof(sport), ":%d", port);
|
apr_snprintf(sport, sizeof(sport), ":%d", port);
|
||||||
|
@ -112,20 +112,27 @@ static int proxy_balancer_canon(request_rec *r, char *url)
|
|||||||
|
|
||||||
path = ap_proxy_canonenc_ex(r->pool, url, strlen(url), enc_path, flags,
|
path = ap_proxy_canonenc_ex(r->pool, url, strlen(url), enc_path, flags,
|
||||||
r->proxyreq);
|
r->proxyreq);
|
||||||
|
if (!path) {
|
||||||
|
return HTTP_BAD_REQUEST;
|
||||||
|
}
|
||||||
search = r->args;
|
search = r->args;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* If we have a raw control character or a ' ' in nocanon path or
|
||||||
|
* r->args, correct encoding was missed.
|
||||||
|
*/
|
||||||
|
if (path == url && *ap_scan_vchar_obstext(path)) {
|
||||||
|
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10416)
|
||||||
|
"To be forwarded path contains control "
|
||||||
|
"characters or spaces");
|
||||||
|
return HTTP_FORBIDDEN;
|
||||||
|
}
|
||||||
if (search && *ap_scan_vchar_obstext(search)) {
|
if (search && *ap_scan_vchar_obstext(search)) {
|
||||||
/*
|
|
||||||
* We have a raw control character or a ' ' in r->args.
|
|
||||||
* Correct encoding was missed.
|
|
||||||
*/
|
|
||||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10407)
|
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10407)
|
||||||
"To be forwarded query string contains control "
|
"To be forwarded query string contains control "
|
||||||
"characters or spaces");
|
"characters or spaces");
|
||||||
return HTTP_FORBIDDEN;
|
return HTTP_FORBIDDEN;
|
||||||
}
|
}
|
||||||
if (path == NULL)
|
|
||||||
return HTTP_BAD_REQUEST;
|
|
||||||
|
|
||||||
r->filename = apr_pstrcat(r->pool, "proxy:" BALANCER_PREFIX, host,
|
r->filename = apr_pstrcat(r->pool, "proxy:" BALANCER_PREFIX, host,
|
||||||
"/", path, (search) ? "?" : "", (search) ? search : "", NULL);
|
"/", path, (search) ? "?" : "", (search) ? search : "", NULL);
|
||||||
|
@ -102,9 +102,20 @@ static int proxy_fcgi_canon(request_rec *r, char *url)
|
|||||||
|
|
||||||
path = ap_proxy_canonenc_ex(r->pool, url, strlen(url), enc_path, flags,
|
path = ap_proxy_canonenc_ex(r->pool, url, strlen(url), enc_path, flags,
|
||||||
r->proxyreq);
|
r->proxyreq);
|
||||||
|
if (!path) {
|
||||||
|
return HTTP_BAD_REQUEST;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* If we have a raw control character or a ' ' in nocanon path,
|
||||||
|
* correct encoding was missed.
|
||||||
|
*/
|
||||||
|
if (path == url && *ap_scan_vchar_obstext(path)) {
|
||||||
|
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10414)
|
||||||
|
"To be forwarded path contains control "
|
||||||
|
"characters or spaces");
|
||||||
|
return HTTP_FORBIDDEN;
|
||||||
}
|
}
|
||||||
if (path == NULL)
|
|
||||||
return HTTP_BAD_REQUEST;
|
|
||||||
|
|
||||||
r->filename = apr_pstrcat(r->pool, "proxy:fcgi://", host, sport, "/",
|
r->filename = apr_pstrcat(r->pool, "proxy:fcgi://", host, sport, "/",
|
||||||
path, NULL);
|
path, NULL);
|
||||||
|
@ -128,26 +128,32 @@ static int proxy_http_canon(request_rec *r, char *url)
|
|||||||
|
|
||||||
path = ap_proxy_canonenc_ex(r->pool, url, strlen(url), enc_path,
|
path = ap_proxy_canonenc_ex(r->pool, url, strlen(url), enc_path,
|
||||||
flags, r->proxyreq);
|
flags, r->proxyreq);
|
||||||
|
if (!path) {
|
||||||
|
return HTTP_BAD_REQUEST;
|
||||||
|
}
|
||||||
search = r->args;
|
search = r->args;
|
||||||
}
|
}
|
||||||
if (search && *ap_scan_vchar_obstext(search)) {
|
|
||||||
/*
|
|
||||||
* We have a raw control character or a ' ' in r->args.
|
|
||||||
* Correct encoding was missed.
|
|
||||||
*/
|
|
||||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10408)
|
|
||||||
"To be forwarded query string contains control "
|
|
||||||
"characters or spaces");
|
|
||||||
return HTTP_FORBIDDEN;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case PROXYREQ_PROXY:
|
case PROXYREQ_PROXY:
|
||||||
path = url;
|
path = url;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
if (path == NULL)
|
* If we have a raw control character or a ' ' in nocanon path or
|
||||||
return HTTP_BAD_REQUEST;
|
* r->args, correct encoding was missed.
|
||||||
|
*/
|
||||||
|
if (path == url && *ap_scan_vchar_obstext(path)) {
|
||||||
|
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10415)
|
||||||
|
"To be forwarded path contains control "
|
||||||
|
"characters or spaces");
|
||||||
|
return HTTP_FORBIDDEN;
|
||||||
|
}
|
||||||
|
if (search && *ap_scan_vchar_obstext(search)) {
|
||||||
|
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10408)
|
||||||
|
"To be forwarded query string contains control "
|
||||||
|
"characters or spaces");
|
||||||
|
return HTTP_FORBIDDEN;
|
||||||
|
}
|
||||||
|
|
||||||
if (port != def_port)
|
if (port != def_port)
|
||||||
apr_snprintf(sport, sizeof(sport), ":%d", port);
|
apr_snprintf(sport, sizeof(sport), ":%d", port);
|
||||||
|
@ -94,9 +94,19 @@ static int uwsgi_canon(request_rec *r, char *url)
|
|||||||
|
|
||||||
path = ap_proxy_canonenc_ex(r->pool, url, strlen(url), enc_path, flags,
|
path = ap_proxy_canonenc_ex(r->pool, url, strlen(url), enc_path, flags,
|
||||||
r->proxyreq);
|
r->proxyreq);
|
||||||
|
if (!path) {
|
||||||
|
return HTTP_BAD_REQUEST;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!path) {
|
/*
|
||||||
return HTTP_BAD_REQUEST;
|
* If we have a raw control character or a ' ' in nocanon path,
|
||||||
|
* correct encoding was missed.
|
||||||
|
*/
|
||||||
|
if (path == url && *ap_scan_vchar_obstext(path)) {
|
||||||
|
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10417)
|
||||||
|
"To be forwarded path contains control "
|
||||||
|
"characters or spaces");
|
||||||
|
return HTTP_FORBIDDEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
r->filename =
|
r->filename =
|
||||||
|
@ -205,20 +205,27 @@ static int proxy_wstunnel_canon(request_rec *r, char *url)
|
|||||||
|
|
||||||
path = ap_proxy_canonenc_ex(r->pool, url, strlen(url), enc_path, flags,
|
path = ap_proxy_canonenc_ex(r->pool, url, strlen(url), enc_path, flags,
|
||||||
r->proxyreq);
|
r->proxyreq);
|
||||||
|
if (!path) {
|
||||||
|
return HTTP_BAD_REQUEST;
|
||||||
|
}
|
||||||
search = r->args;
|
search = r->args;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* If we have a raw control character or a ' ' in nocanon path or
|
||||||
|
* r->args, correct encoding was missed.
|
||||||
|
*/
|
||||||
|
if (path == url && *ap_scan_vchar_obstext(path)) {
|
||||||
|
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10419)
|
||||||
|
"To be forwarded path contains control "
|
||||||
|
"characters or spaces");
|
||||||
|
return HTTP_FORBIDDEN;
|
||||||
|
}
|
||||||
if (search && *ap_scan_vchar_obstext(search)) {
|
if (search && *ap_scan_vchar_obstext(search)) {
|
||||||
/*
|
|
||||||
* We have a raw control character or a ' ' in r->args.
|
|
||||||
* Correct encoding was missed.
|
|
||||||
*/
|
|
||||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10409)
|
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10409)
|
||||||
"To be forwarded query string contains control "
|
"To be forwarded query string contains control "
|
||||||
"characters or spaces");
|
"characters or spaces");
|
||||||
return HTTP_FORBIDDEN;
|
return HTTP_FORBIDDEN;
|
||||||
}
|
}
|
||||||
if (path == NULL)
|
|
||||||
return HTTP_BAD_REQUEST;
|
|
||||||
|
|
||||||
if (port != def_port)
|
if (port != def_port)
|
||||||
apr_snprintf(sport, sizeof(sport), ":%d", port);
|
apr_snprintf(sport, sizeof(sport), ":%d", port);
|
||||||
|
Reference in New Issue
Block a user