Red de conocimiento informático - Conocimiento informático - Cómo resolver el problema del análisis de nginx ssi incluyendo la ruta

Cómo resolver el problema del análisis de nginx ssi incluyendo la ruta

es;! -# include virtual=".../.../test/test.htm"-gt; Esta sintaxis no es un problema en Apache, pero no funciona en nginx

lt en nginx;! -# include virtual="/test/test.htm"-gt; ¡Puedes usar esta sintaxis para explicar que el análisis de nginx no admite la ruta "...."!

Este problema debería resolverse, después de todo, nginx es de código abierto.

Por cierto, esto también confirma mi último artículo "¡Después de trabajar durante más de 5 años, tengo cierta comprensión del entorno y las habilidades de la industria!" "¿Por qué el código abierto es mejor que el código cerrado?" c La función ngx_http_ssi_include en este archivo se utiliza para interpretar la directiva de inclusión

Esta función representa el procesamiento de mensajes de error de nginx en NGX_HTTP_LOG_UNSAFE y NGX_HTTP_SSI_ERROR.

Luego busque la función correspondiente ngx_http_parse_unsafe_uri en src/http/ngx_http_parse.c, como se muestra a continuación.

Encuentre la función correspondiente ngx_ttp_parse_unafe_uri en c, de la siguiente manera:

gx_int_t

ngx_http_parse_unsafe_uri(ngx_http_request_t_unsafe_uri(ngx_http_request_t_unsafe_uri) http_request_t *r, http_request_t *r, ngx_str_t *uri,

ngx_str_t *args, ngx_uint_t *flags)

{

u_char ch, *p;

size_t len ​​

len = uri; -gt;len;

p = uri-gt;data;

if (len == 0 || p[0] == '?') {

ir a inseguro;

}

if (p[0] == '.' amp; len == 3 amp; amp; p[1] == '. ' amp; amp; (ngx_path_separator(p[2]))){

Devuelve estado inseguro

}

para ( /* void */ ; len; len--) {

ch = *p ;

if (habitual[ch[ch gt; gt; 5] amp; (1 lt; lt; (ch amp ; 0x1f))){

continuar;

}

if (ch == '?') {

args-gt ; len = len - 1;

args-gt; datos = p;

uri-gt; len -= len

Devuelve NGX_OK ; p>

}

if (ch == '\0') {

ir a inseguro;

}

if (ngx_path_separator(ch) amp; amp; len gt; 2) {

/* detectar "/./"*/

if (p[0] == '.' amp; amp; p[1] == '.' amp; ngx_path_separator(p[2])){

Devuelve inseguro

}

}

Devuelve NGX_OK;

inseguro:

if (*flags amp; NGX_HTTP_LOG_UNSAFE) {

ngx_log_error(NGX_LOG_ERR, r- gt; conexión-gt; log, 0,

"se detectó URI \"V\" inseguro",

}

return NGX_ERROR;

}

Al ver este comentario /* detect "/.../"*/, comprenderá por qué dicha ruta no se puede ejecutar.../.. ./test /test.htm

nginx: esta ruta tiene riesgos de seguridad.

El método seguro no es modificar nginx, sino ajustar la ruta del programa en sí. Esto no se discutirá aquí. No hay forma de hacer esto en el sitio web actual, así que si lo desea. Para usarlo, debe modificar el módulo ssi y volver a compilarlo nginx

Modifique el siguiente contenido:

src/http/modules/ngx_http_ssi_filter_ module.c Este archivo contiene la función ngt_http_ssi_filter_. y la función ngx_http_ssi_filter_. La función ngx_http_ssi_include en el archivo c está comentada

if (ngx_http_parse_unsafe_uri(r, uri, args, flags) ! = NGX_OK) {

return NGX_HTTP_SSI_ERROR

}