ПРОЕКТЫ 


  АРХИВ 


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: X-Accel-Redirect



Alex Vorona пишет:
Igor Sysoev пишет:
On Fri, 23 Dec 2005, Dmitriy MiksIr wrote:

Понял, будем переделывать =)
Тогда к вопросу о безопасности - если некий скрипт на бекенде выдает
X-Accel-Redirect: /
То происходит зацикливание запроса...
Возможно, предусмотреть счетчик запросов или просто разрешить принимать X-Accel-Redirect редиректы только на location помеченный как internal.

Да, нужно сделать какое-то ограничение.


Игорь Сысоев
http://sysoev.ru


Как-то можно вообще отключить X-Accel-Redirect в определённом location с недоверяемыми бэкендами?


Игорь, что скажете про вложенный патч?
diff -ur nginx-0.6.28.orig/src/http/ngx_http_core_module.c 
nginx-0.6.28/src/http/ngx_http_core_module.c
--- nginx-0.6.28.orig/src/http/ngx_http_core_module.c   2008-03-10 
16:45:41.000000000 +0200
+++ nginx-0.6.28/src/http/ngx_http_core_module.c        2008-04-12 
20:18:18.000000000 +0300
@@ -506,6 +506,13 @@
       offsetof(ngx_http_core_loc_conf_t, server_tokens),
       NULL },
 
+    { ngx_string("xar"),
+      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+      ngx_conf_set_flag_slot,
+      NGX_HTTP_LOC_CONF_OFFSET,
+      offsetof(ngx_http_core_loc_conf_t, xar),
+      NULL },
+
     { ngx_string("error_page"),
       NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
                         |NGX_CONF_2MORE,
@@ -2719,6 +2726,7 @@
     lcf->log_not_found = NGX_CONF_UNSET;
     lcf->recursive_error_pages = NGX_CONF_UNSET;
     lcf->server_tokens = NGX_CONF_UNSET;
+    lcf->xar = NGX_CONF_UNSET;
     lcf->types_hash_max_size = NGX_CONF_UNSET_UINT;
     lcf->types_hash_bucket_size = NGX_CONF_UNSET_UINT;
 
@@ -2941,6 +2949,7 @@
     ngx_conf_merge_value(conf->recursive_error_pages,
                               prev->recursive_error_pages, 0);
     ngx_conf_merge_value(conf->server_tokens, prev->server_tokens, 1);
+    ngx_conf_merge_value(conf->xar, prev->xar, 1);
 
     ngx_conf_merge_ptr_value(conf->open_file_cache,
                               prev->open_file_cache, NULL);
diff -ur nginx-0.6.28.orig/src/http/ngx_http_core_module.h 
nginx-0.6.28/src/http/ngx_http_core_module.h
--- nginx-0.6.28.orig/src/http/ngx_http_core_module.h   2007-12-29 
18:38:23.000000000 +0200
+++ nginx-0.6.28/src/http/ngx_http_core_module.h        2008-04-12 
20:16:29.000000000 +0300
@@ -305,6 +305,7 @@
     ngx_flag_t    log_not_found;           /* log_not_found */
     ngx_flag_t    recursive_error_pages;   /* recursive_error_pages */
     ngx_flag_t    server_tokens;           /* server_tokens */
+    ngx_flag_t    xar;                    /* X-Accel-Redirect */
 
 #if (NGX_HTTP_GZIP)
     ngx_flag_t    gzip_vary;               /* gzip_vary */
diff -ur nginx-0.6.28.orig/src/http/ngx_http_upstream.c 
nginx-0.6.28/src/http/ngx_http_upstream.c
--- nginx-0.6.28.orig/src/http/ngx_http_upstream.c      2008-03-05 
09:30:44.000000000 +0200
+++ nginx-0.6.28/src/http/ngx_http_upstream.c   2008-04-12 23:52:07.000000000 
+0300
@@ -1251,6 +1251,10 @@
 
     if (u->headers_in.x_accel_redirect) {
 
+        clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+
+       if (clcf->xar) {
+
         ngx_http_upstream_finalize_request(r, u, NGX_DECLINED);
 
         part = &u->headers_in.headers.part;
@@ -1300,6 +1304,7 @@
 
         ngx_http_internal_redirect(r, uri, &args);
         return;
+        }
     }
 
     part = &u->headers_in.headers.part;


 




Copyright © Lexa Software, 1996-2009.