diff options
author | Dmitry Volyntsev <xeioex@nginx.com> | 2024-04-02 08:52:56 -0700 |
---|---|---|
committer | Dmitry Volyntsev <xeioex@nginx.com> | 2024-04-02 08:52:56 -0700 |
commit | 86e2fbac6420881d53c4030e6934959eea2a4ffc (patch) | |
tree | 814c98c7bcd3a7b02d4d3b310b1abc9a3ce89c0b /nginx/ngx_http_js_module.c | |
parent | fa4109181712fcef2aa2ab91e3f68eee8e2b15ad (diff) | |
download | njs-86e2fbac6420881d53c4030e6934959eea2a4ffc.tar.gz njs-86e2fbac6420881d53c4030e6934959eea2a4ffc.zip |
HTTP: validating URI and args arguments in r.subrequest().
Diffstat (limited to 'nginx/ngx_http_js_module.c')
-rw-r--r-- | nginx/ngx_http_js_module.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/nginx/ngx_http_js_module.c b/nginx/ngx_http_js_module.c index b37847b7..c6249548 100644 --- a/nginx/ngx_http_js_module.c +++ b/nginx/ngx_http_js_module.c @@ -305,6 +305,9 @@ static char *ngx_http_js_merge_loc_conf(ngx_conf_t *cf, void *parent, static ngx_ssl_t *ngx_http_js_ssl(njs_vm_t *vm, ngx_http_request_t *r); static ngx_flag_t ngx_http_js_ssl_verify(njs_vm_t *vm, ngx_http_request_t *r); +static ngx_int_t ngx_http_js_parse_unsafe_uri(ngx_http_request_t *r, + njs_str_t *uri, njs_str_t *args); + #if (NGX_HTTP_SSL) static ngx_conf_bitmask_t ngx_http_js_ssl_protocols[] = { @@ -3272,6 +3275,11 @@ ngx_http_js_ext_subrequest(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, } } + if (ngx_http_js_parse_unsafe_uri(r, &uri_arg, &args_arg) != NGX_OK) { + njs_vm_error(vm, "unsafe uri"); + return NJS_ERROR; + } + arg = njs_arg(args, nargs, 3); if (callback == NULL && !njs_value_is_undefined(arg)) { @@ -4979,3 +4987,32 @@ ngx_http_js_ssl_verify(njs_vm_t *vm, ngx_http_request_t *r) return 0; #endif } + + +static ngx_int_t +ngx_http_js_parse_unsafe_uri(ngx_http_request_t *r, njs_str_t *uri, + njs_str_t *args) +{ + ngx_str_t uri_arg, args_arg; + ngx_uint_t flags; + + flags = NGX_HTTP_LOG_UNSAFE; + + uri_arg.data = uri->start; + uri_arg.len = uri->length; + + args_arg.data = args->start; + args_arg.len = args->length; + + if (ngx_http_parse_unsafe_uri(r, &uri_arg, &args_arg, &flags) != NGX_OK) { + return NGX_ERROR; + } + + uri->start = uri_arg.data; + uri->length = uri_arg.len; + + args->start = args_arg.data; + args->length = args_arg.len; + + return NGX_OK; +} |