ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: nginx-0.1.29



On Fri, 13 May 2005, Igor Sysoev wrote:

On Fri, 13 May 2005, Zherdev Anatoly wrote:

On Thu, 12 May 2005 22:09:08 +0400 (MSD)
Igor Sysoev <is@xxxxxxxxxxxxx> wrote:

On Thu, 12 May 2005, Михаил Монашёв wrote:

IS>      *) Изменение: nginx теперь передаёт неверные строки в
заголовках
IS>         запроса клиента и ответа бэкенда.

Мне nginx нравился тем, что блокировал странные запросы и не пускал
их
дальше  к  бэкенду,  от чего последнему могло поплохеть. Сейчас
как-то
можно включить эту опцию обратно?

Сейчас - нет, но можно добавить параметр.

Это будет хорошо. Только хочется иметь его довольно гибким. Мне например
совершенно не нужно блокировать "кривые" хедеры которые передает бакенд,
но вот от клиента к бакенду передавать кривости совсем не хочется.

То есть клиент->сервер фильтровать надо, а сервер->клиент не надо.

Да, предполагается фильтровать только от клиента. Настраиваться будет
на уровне сервера, но нужно понимать, что сервер в данном контексте
означает ip-based, а не name-based.

А вот и патч. Директива ignore_invalid_headers [on|off], по умолчанию
заголовки игнорируются (on). В состоянии off заголовки передаются бэкенду.


Игорь Сысоев
http://sysoev.ru
--- src/http/ngx_http_core_module.c     Sat Apr 30 13:48:14 2005
+++ src/http/ngx_http_core_module.c     Fri May 13 13:26:28 2005
@@ -144,6 +144,13 @@
       offsetof(ngx_http_core_srv_conf_t, restrict_host_names),
       &ngx_http_restrict_host_names },
 
+    { ngx_string("ignore_invalid_headers"),
+      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
+      ngx_conf_set_flag_slot,
+      NGX_HTTP_SRV_CONF_OFFSET,
+      offsetof(ngx_http_core_srv_conf_t, ignore_invalid_headers),
+      NULL },
+
     { ngx_string("location"),
       NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE12,
       ngx_http_core_location,
@@ -1578,6 +1588,7 @@
     cscf->client_header_timeout = NGX_CONF_UNSET_MSEC;
     cscf->client_header_buffer_size = NGX_CONF_UNSET_SIZE;
     cscf->restrict_host_names = NGX_CONF_UNSET_UINT;
+    cscf->ignore_invalid_headers = NGX_CONF_UNSET;
 
     return cscf;
 }
@@ -1662,6 +1673,9 @@
 
     ngx_conf_merge_unsigned_value(conf->restrict_host_names,
                               prev->restrict_host_names, 0);
+
+    ngx_conf_merge_value(conf->ignore_invalid_headers,
+                              prev->ignore_invalid_headers, 1);
 
     return NGX_CONF_OK;
 }
--- src/http/ngx_http_core_module.h     Fri Apr 22 23:02:01 2005
+++ src/http/ngx_http_core_module.h     Fri May 13 13:22:57 2005
@@ -87,6 +87,8 @@
     ngx_msec_t                 client_header_timeout;
 
     ngx_uint_t                 restrict_host_names;
+
+    ngx_flag_t                 ignore_invalid_headers;
 } ngx_http_core_srv_conf_t;
 
 
--- src/http/ngx_http_parse.c   Mon May  2 23:49:06 2005
+++ src/http/ngx_http_parse.c   Fri May 13 13:02:47 2005
@@ -529,6 +529,8 @@
 
         /* first char */
         case sw_start:
+            r->invalid_header = 0;
+
             switch (ch) {
             case CR:
                 r->header_end = p;
@@ -552,6 +554,8 @@
                     break;
                 }
 
+                r->invalid_header = 1;
+
                 break;
 
             }
@@ -605,6 +609,8 @@
                 state = sw_ignore_line;
                 break;
             }
+
+            r->invalid_header = 1;
 
             break;
 
--- src/http/ngx_http_request.c Wed May  4 12:08:43 2005
+++ src/http/ngx_http_request.c Fri May 13 13:42:48 2005
@@ -725,6 +725,7 @@
     ngx_connection_t           *c;
     ngx_http_header_t          *hh;
     ngx_http_request_t         *r;
+    ngx_http_core_srv_conf_t   *cscf;
     ngx_http_core_main_conf_t  *cmcf;
 
     c = rev->data;
@@ -742,6 +743,7 @@
     }
 
     cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
+    cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
     hh = (ngx_http_header_t *) cmcf->headers_in_hash.buckets;
 
     rc = NGX_AGAIN;
@@ -783,8 +785,7 @@
 
         if (rc == NGX_OK) {
 
-#if 0
-            if (r->invalid_header) {
+            if (r->invalid_header && cscf->ignore_invalid_headers) {
 
                 /* there was error while a header line parsing */
 
@@ -796,7 +797,6 @@
                               &header);
                 continue;
             }
-#endif
 
             /* a header line has been parsed successfully */
 
--- src/http/ngx_http_request.h Mon May  2 23:41:21 2005
+++ src/http/ngx_http_request.h Fri May 13 12:16:38 2005
@@ -336,6 +337,8 @@
 
     /* URI with "\0" or "%00" */
     unsigned                          zero_in_uri:1;
+
+    unsigned                          invalid_header:1;
 
     unsigned                          valid_location:1;
     unsigned                          valid_unparsed_uri:1;


 




Copyright © Lexa Software, 1996-2009.