Nginxã¯ééããªãæãã¯ãŒã«ãªWebãµãŒããŒã®1ã€ã§ãã ãã ããé©åºŠã«ã·ã³ãã«ã§ãéåžžã«æ¡åŒµæ§ããããçç£çã§ãããããèªåãžã®æ¬æãå¿
èŠã§ãã ãã ããããã¯ããµãŒãã¹ã®ã»ãã¥ãªãã£ãšå¯çšæ§ãäŸåããã»ãšãã©ãã¹ãŠã®ãœãããŠã§ã¢ã«é©çšãããŸãã Nginxã奜ãã§ãã Yandexã§ã¯ãåçŽãªãªããŒã¹ãããã·ããæ¬æ Œçãªã¢ããªã±ãŒã·ã§ã³ãŸã§ãããŸããŸãªæ§æã®èšå€§ãªæ°ã®ã€ã³ã¹ããŒã«ã«ãã£ãŠè¡šãããŸãã ãã®å€æ§æ§ã«ãããç§ãã¡ã¯å
±æããã[å®å
šã§ãªã]æ§æã®çµéšãç©ãã§ããŸãã

ãããããŸãæåã«ã Nginxã¯Webã¢ããªã±ãŒã·ã§ã³ã®å®å
šãªãã¥ãŒãã§ãããããNginxã®å®å
šãªæ§æã«é·ãéèŠãããããŠããŸãããã€ãŸãããã®æ§æã¯ãã¢ããªã±ãŒã·ã§ã³èªäœã®ã³ãŒããããç§ãã¡ã®åŽã§ã®å¶åŸ¡ãå¿
èŠãšããŸãã æšå¹Žããã®ããã»ã¹ã«ã¯æ·±å»ãªèªååãå¿
èŠã§ããããšãæããã«ãªããŸããã ããã§ã
Gixy瀟å
ãããžã§ã¯ã
ãå§ãŸããŸãããèŠä»¶ã¯æ¬¡ã®ãšããã§ãã
-ã·ã³ãã«ã§ããããšã
-ããããæ¡åŒµå¯èœã
-ãã¹ãããã»ã¹ã«äŸ¿å©ã«çµ±åã§ããæ©èœã
-ã€ã³ã¯ã«ãŒãžã§ã³ã解決ã§ãããšäŸ¿å©ã§ãã
-ããã³å€æ°ãæäœããŸãã
-æ£èŠè¡šçŸãå¿ããªãã§ãã ããã
ççŽã«èšã£ãŠãæåŸãŸã§ïŒGolangãšPythonã®éã§ïŒèšèªã®éžæããããã£ãŠããŸããã ãã®çµæãPythonãããäžè¬çã«ãªãããšãæåŸ
ããŠéžã°ããŸãããã€ãŸããéçºãå°ãç°¡åã«ãªããšããããšã§ãã
åé¡ã«ã€ããŠ
ãã®ç޹ä»ãçµäºããäžè¬çãªåé¡ã®äŸã«ç§»ããŸã:)å°æ¥ã®æ··ä¹±ãé¿ããããããã¹ãŠã®äŸã§ã¯ãçŸåšã®ã¡ã€ã³ã©ã€ã³ããŒãžã§ã³ã®Nginx-1.13.0ã䜿çšããŸããã
ãµãŒããŒåŽãªã¯ãšã¹ãåœé Server Side Request Forgeryã¯ãWebã¢ããªã±ãŒã·ã§ã³ã«ä»£ãã£ãŠïŒãã®å Žåã¯Nginxã«ä»£ãã£ãŠïŒããŸããŸãªçš®é¡ã®ã¯ãšãªãå®è¡ã§ããè匱æ§ã§ãã ããã¯ãæ»æè
ããããã·ããããµãŒããŒã®ã¢ãã¬ã¹ãå¶åŸ¡ã§ããå Žåã«çºçããŸããããšãã°ã
XSendfileã®æ§æã
æ£ãããªãå Žå
ãªã©ã§ã ã
ç§èªèº«ã®çµéšããããã®è匱æ§ã¯ããã€ãã®ãšã©ãŒã«é¢é£ããŠããããšãå€ããšèšããŸãã
-
å
éšãã£ã¬ã¯ãã£ãã®æ¬ åŠã ãã®æå³ã¯ãç¹å®ã®å Žæãå
éšã¯ãšãªã«ã®ã¿äœ¿çšã§ããããšã瀺ãããšã§ãã
-å®å
šã§ãªãå
éšãªãã€ã¬ã¯ãã
æåã®ã±ãŒã¹ã§ãã¹ãŠãæç¢ºãªå Žåãå
éšãªãã€ã¬ã¯ãã§ã¯äºæ
ã¯ããã»ã©åçŽã§ã¯ãããŸããã ç§ã¯ããªãã®å€ããåæ§ã®æ§æãèŠã/æžãããšæãïŒ
location ~* ^/internal-proxy/(?<proxy_proto>https?)/(?<proxy_host>.*?)/(?<proxy_path>.*)$ { internal; proxy_pass $proxy_proto://$proxy_host/$proxy_path ; proxy_set_header Host $proxy_host; }
æ®å¿µãªããããã®æ§æã§ã¯ãããã¥ã¡ã³ãã«ãããšãå°ãªããšããã¹ãŠã®rewriteããã³try_filesãã£ã¬ã¯ãã£ãã確èªããå¿
èŠããããŸãã
å
éšãªã¯ãšã¹ãã¯æ¬¡ã®ãšããã§ãã
-error_pageãindexãrandom_indexã try_filesãã£ã¬ã¯ãã£ãã«ãã£ãŠãªãã€ã¬ã¯ãããããªã¯ãšã¹ãã
-äžæµãµãŒããŒã®å¿çããããŒã®ãX-Accel-Redirectããã£ãŒã«ãã䜿çšããŠãªãã€ã¬ã¯ããããèŠæ±ã
-ngx_http_ssi_moduleã¢ãžã¥ãŒã«ã®ãinclude virtualãã³ãã³ããšngx_http_addition_moduleã¢ãžã¥ãŒã«ãã£ã¬ã¯ãã£ãã«ãã£ãŠçæããããµãã¯ãšãªã
-rewriteãã£ã¬ã¯ãã£ãã«ãã£ãŠå€æŽããããªã¯ãšã¹ãã
äžæ³šæãªæžãæããè¡ããšãå
éšã®å Žæã§ãªã¯ãšã¹ããè¡ãããšãã§ããŸãã ããã¯éåžžã«ç°¡åã«ç¢ºèªã§ããŸãã
-èšå®ïŒ
location ~* ^/internal-proxy/(?<proxy_proto>https?)/(?<proxy_host>.*?)/(?<proxy_path>.*)$ { internal; return 200 "proto: $proxy_proto\nhost: $proxy_host\npath: $proxy_path"; } rewrite ^/(?!_api)(.*)/\.files/(.*)$ /$1/.download?file=$2 last;
-æäœïŒ
GET /internal-proxy/http/evil.com/.files/some HTTP/1.0 Host: localhost HTTP/1.1 200 OK Content-Length: 42 Content-Type: application/octet-stream Date: Fri, 28 Apr 2017 13:55:51 GMT Server: nginx/1.13.0 proto: http host: evil.com path: .download
ãã®ç¶æ³ã§ã¯ãéåžžãããã€ãã®ãã©ã¯ãã£ã¹ããå§ãããŸãã
-ãããã·ã«ã¯å
éšãã±ãŒã·ã§ã³ã®ã¿ã䜿çšããŸãã
-å¯èœã§ããã°ããŠãŒã¶ãŒããŒã¿ã®è»¢éãçŠæ¢ããŸãã
-ãããã·ããããµãŒããŒã®ã¢ãã¬ã¹ãä¿è·ããŸãã
â¢ãããã·ããããã¹ãã®æ°ãéãããŠããå ŽåïŒããšãã°ãS3ãããå ŽåïŒãããŒãã³ãŒãããããããŸãã¯ä»ã®äŸ¿å©ãªæ¹æ³ã䜿çšããŠéžæããããšããå§ãããŸãã
â¢äœããã®çç±ã§ãããã·ã«äœ¿çšã§ãããã¹ãŠã®ãã¹ãããªã¹ãã§ããªãå Žåã¯ã眲åãã䟡å€ããããŸãã
ãªãã¡ã©ãŒãŸãã¯ãªãªãžã³ãæ€èšŒããããã®äžæ£ãªæ£èŠè¡šçŸåé¡ããããŸãã æ£èŠè¡šçŸã䜿çšããŠè§£æ±ºããããšã«ããŸããã
ãä»ã2ã€ã®åé¡ããããŸããã
å€ãã®å ŽåãRefererãŸãã¯OriginèŠæ±ããããŒã®æ€èšŒã¯ãæ£èŠè¡šçŸã䜿çšããŠè¡ãããŸãã ããã¯ãæ¡ä»¶ä»ãã§X-Frame-OptionsããããŒãèšå®ããïŒClickJackingä¿è·ïŒããã¯ãã¹ãªãªãžã³ãªãœãŒã¹ã·ã§ã¢ãªã³ã°ïŒ
CORS ïŒãå®è£
ããããã«å¿
èŠã«ãªãããšããããããŸãã ãããŠããRefererãã®æ€èšŒãå°ãç°¡åã§ãæ¡ä»¶ã«ãã£ãŠã¯ã
ngx_http_referer_moduleã¢ãžã¥ãŒã«ãåªå
ããŠæ£èŠè¡šçŸãæåŠã§ããŸããããOriginãã§ã¯ãã¹ãŠãããã»ã©åçŽã§ã¯ãããŸããã
åé¡ã®äž»ãª2ã€ã®ã¯ã©ã¹ãåºå¥ããŸãã
-æ£èŠè¡šçŸã®æºåã®ãšã©ãŒã
-ä¿¡é Œã§ããªããµãŒãããŒãã£ãã¡ã€ã³ã®è§£æ±ºã
åé¡ã®ããæ§æã¯æ¬¡ã®ãšããã§ãã
if ($http_origin ~* ((^https://www\.yandex\.ru)|(^https://ya\.ru)/)) { add_header 'Access-Control-Allow-Origin' "$http_origin"; add_header 'Access-Control-Allow-Credentials' 'true'; }
å®éãæ£èŠè¡šçŸã倧å¹
ã«ç°¡ç¥åããŸãããããã®äŸã§ããæåã«åé¡ãèŠãã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã 人ã
ã¯æ£èŠè¡šçŸãèªããããæžãæ¹ãç°¡åã§ãã
幞ããªããšã«ããã®åé¡ã¯ãã®ãã·ã³ã§ã¯äžè¬çã§ã¯ãªããããGixyã¯ãã®æ£èŠè¡šçŸã
www.yandex.ru.evil.comãæå¹ãªçºä¿¡å
ãšããŠãã§ãã¯ããããã«ã€ããŠéç¥ããããšãç¬èªã«å€æã§ããŸãã
$ gixy --origins-domains yandex.ru,ya.ru /etc/nginx/nginx.conf ==================== Results =================== Problem: [origins] Validation regex for "origin" or "referrer" matches untrusted domain. Description: Improve the regular expression to match only trusted referrers. Additional info: https://github.com/yandex/gixy/blob/master/docs/ru/plugins/origins.md Reason: Regex matches "https://www.yandex.ru.evil.com" as a valid origin. Pseudo config: include /etc/nginx/sites/default.conf; server { server_name _; if ($http_origin ~* ((^https://www\.yandex\.ru)|(^https://ya\.ru)/)) { } }
ãŸãã¯ãya.ruãååã«ä¿¡é ŒãããŠããªãå Žåã
ya.ruããã³
www.yandex.ru.evil.comã®èµ·æºãå ±åããŸãã
$ gixy --origins-domains yandex.ru /etc/nginx/nginx.conf ==================== Results =================== Problem: [origins] Validation regex for "origin" or "referrer" matches untrusted domain. Description: Improve the regular expression to match only trusted referrers. Additional info: https://github.com/yandex/gixy/blob/master/docs/ru/plugins/origins.md Reason: Regex matches "https://www.yandex.ru.evil.com", "https://ya.ru/" as a valid origin. Pseudo config: include /etc/nginx/sites/default.conf; server { server_name _; if ($http_origin ~* ((^https://www\.yandex\.ru)|(^https://ya\.ru)/)) { } }
HTTPåå²HTTPåå²ã¯ãNginxïŒHTTPèŠæ±åå²ïŒãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã¯ã©ã€ã¢ã³ãïŒHTTPå¿çåå²ïŒã®èåŸã«ããã¢ããªã±ãŒã·ã§ã³ãæ»æããããã«äœ¿çšãããŸãã ãã®è匱æ§ã¯ãæ»æè
ãNginxã«ãã£ãŠçæããããªã¯ãšã¹ããŸãã¯ã¬ã¹ãã³ã¹ã«æ¹è¡æåãåã蟌ãããšãã§ããå Žåã«çºçããŸãã
ä¿¡é Œã§ããã¢ããã€ã¹ã¯ãããŸãããïŒæ³šæããããšãé€ããŠïŒãåžžã«ããã€ãã®ããšã«æ³šæããå¿
èŠããããŸãã
-ãªã¯ãšã¹ãã®çæãæ
åœãããã£ã¬ã¯ãã£ãã§äœ¿çšããã倿°ïŒCRLFãå«ããããšãã§ããŸãïŒãããšãã°ãrewriteãreturnãadd_headerãproxy_set_headerãproxy_pass;
-䜿çšããã倿°$ uriããã³$ document_uriã§ãã䜿çšãããŠããå Žåã¯ãurldecodedå€ãå«ãŸããŠããããšãä¿èšŒãããŠãããããã©ã®ãã£ã¬ã¯ãã£ãã§äœ¿çšãããŸããã
-æä»çç¯å²ïŒïŒP [^ã] +ïŒãæã€ã°ã«ãŒãããååŸãã倿°ã«ç¹ã«æ³šæããŠãã ããã
é€å€ç¯å²ã®äŸïŒ
-èšå®ïŒ
server { listen 80 default; location ~ /v1/((?<action>[^.]*)\.json)?$ { add_header X-Action $action; return 200 "OK"; } }
-æäœïŒ
GET /v1/see%20below%0d%0ax-crlf-header:injected.json HTTP/1.0 Host: localhost HTTP/1.1 200 OK Content-Length: 2 Content-Type: application/octet-stream Date: Fri, 28 Apr 2017 13:57:28 GMT Server: nginx/1.13.0 X-Action: see below x-crlf-header: injected OK
ã芧ã®ãšãããå¿çããããŒx-crlf-headerïŒã远å ã§ããŸããã ããã¯ãããã€ãã®ç¶æ³ã®çµã¿åãããåå ã§çºçããŸããã
-add_headerã¯ãäœæè
ãçµæãèªèããŠãããšä»®å®ããŠãæž¡ãããå€ããšã³ã³ãŒã/æ€èšŒããŸããã
-å Žæã®åŠçåã«ãã¹ã®å€ãæ£èŠåãããŸãã
-$ã¢ã¯ã·ã§ã³å€æ°ã¯ãæä»çç¯å²ãæã€æ£èŠè¡šçŸã°ã«ãŒãããéžæãããŸããïŒ[^ã] *;
-ãããã£ãŠã$ã¢ã¯ã·ã§ã³å€æ°ã®å€ã¯ã以äžãåç
§ããããã«ãªããŸãã\ r \ nx-crlf-headerïŒHTTPå¿çã«æ¿å
¥ãããŠèœã¡ãŸããã
幞ããªããšã«ãGixyã¯ãã®ã¿ã¹ã¯ã§éåžžã«æåããŠããŸãã
-圌ã¯ãå±éºãªã倿°ãç¥ã£ãŠããŸã-ããæ£ç¢ºã«ã¯ãã»ãšãã©ã®çµã¿èŸŒã¿å€æ°ã®èš±å®¹ãããæåã»ãããç¥ã£ãŠããŸãã ãããã£ãŠã$ request_uriãš$ uriã®éãã¯æããã§ãã
-æ£èŠè¡šçŸã°ã«ãŒããã倿°ãæœåºã§ããŸãã
-ä»»æã®æåïŒãã®å Žåã¯\ nïŒãæ£èŠè¡šçŸïŒãŸãã¯åäžã®ã°ã«ãŒãïŒã«ãã£ãŠã¹ãããã³ã°ã§ãããã©ããã倿ã§ããŸãã
ãã1ã€ã®è峿·±ãäŸã¯ãtry_filesã«ããæžãæãã§ãã
-èšå®ïŒ
server { listen 80 default; location / { try_files $uri $uri/ /index.php?q=$uri; } location ~ \.php { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:9000; } }
-æäœïŒ127.0.0.1:9000ã§ãããã°ãšã³ãŒãµãŒããŒããªãã¹ã³ïŒïŒ
GET /request%20HTTP/1.0%0aInjection: HTTP/1.0 Host: localhost HTTP/1.1 200 Ok Content-Length: 244 Content-Type: text/plain Date: Fri, 28 Apr 2017 13:59:18 GMT Server: nginx/1.13.0 GET /index.php?q=/request HTTP/1.0\n Injection: HTTP/1.0\r\n X-Real-IP: 127.0.0.1\r\n X-Forwarded-For: 127.0.0.1\r\n Host: localhost\r\n Connection: close\r\n User-Agent: HTTPie/0.9.8\r\n Accept-Encoding: gzip, deflate\r\n Accept: */*\r\n \r\n
ã©ããã
-ããå®å
šãªå€æ°ãããšãã°$ uriã®ä»£ããã«$ request_uriã䜿çšããŠãã ããã
-/ some /ïŒïŒ[^ /] +ã®ä»£ããã«ã/ some /ïŒïŒ[^ / \ S] +ïŒãªã©ã®æä»çç¯å²ã§ã®æ¹è¡ãçŠæ¢ããŸãã
-ããããã$ uriæ€èšŒã远å ããããšããå§ãããŸãïŒå®è¡ããŠããããšãããã£ãŠããå Žåã®ã¿ïŒã
add_headerãã£ã¬ã¯ãã£ãã§ãäžäœãã®å¿çããããŒããªãŒããŒã©ã€ãããããã¯ããç¥ãããNginxã®æ©èœã§ãããç§ãã¡ã®å€ããã€ãŸãããã€ãŸããç¶ããŸãã äžçªäžã®è¡ã¯éåžžã«åçŽã§ã-ããããŒãåãã¬ãã«ïŒãµãŒããŒã»ã¯ã·ã§ã³ãªã©ïŒã«ã€ã³ã¹ããŒã«ãããäžäœã¬ãã«ãèšå®ãããŠããå ŽåïŒå Žæãªã©ïŒãæåã®ããããŒã¯é©çšãããŸããã
æãç°¡åãªäŸã¯æ¬¡ã®ãšããã§ãã
server { listen 80 default; server_name _; add_header X-Content-Type-Options nosniff; location / { add_header X-Frame-Options DENY; } }
ãã®å Žåãå Žæ/ãåŠçãããšãã«å¿çããããŒX-Content-Type-Optionsã¯èšå®ãããŸããã
ã®ã¯ã·ãŒã¯ããã«ã€ããŠããŸãäŒããŸãïŒ
$ gixy /etc/nginx/nginx.conf ==================== Results =================== Problem: [add_header_redefinition] Nested "add_header" drops parent headers. Description: "add_header" replaces ALL parent headers. See documentation: http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header Additional info: https://github.com/yandex/gixy/blob/master/docs/ru/plugins/addheaderredefinition.md Reason: Parent headers "x-content-type-options" was dropped in current level Pseudo config: include /etc/nginx/sites/default.conf; server { server_name _; add_header X-Content-Type-Options nosniff; location / { add_header X-Frame-Options DENY; } }
ãã®åé¡ã解決ããããã€ãã®æ¹æ³ãç¥ã£ãŠããŸãã
-éèŠãªããããŒãè€è£œããŸãã
-ãµãŒããŒã»ã¯ã·ã§ã³ãªã©ãåãã¬ãã«ã§ããããŒãèšå®ããŸãã
-ngx_headers_moreã¢ãžã¥ãŒã«ã®äœ¿çšãæ€èšããŠãã ããã
ããããã«é·æãšçæããããŸãã ã©ã¡ããéžã¶ãã¯ããªã次第ã§ãã
Gixyã«ã€ããŠ
Nginxã®æ§æã«ã¯çްå¿ã®æ³šæãå¿
èŠã§ããããšãçŽåŸããŠããã ããã°å¹žãã§ãã ãŸããNginxæ§æã®éçåæãæ©èœãããšèããŠããŸãïŒããã«ããã
Nginx Amplifyã®ãšã¯ã¹ããªãšã³ã¹ã確èªãããŸãïŒã æ®å¿µãªãããNginxã®èåŸã«ããã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®å¢çç·ã®ã±ãŒã¹ãŸãã¯ç¹å®ã®æ©èœãèªåçã«æ€åºã§ãããšã¯éããŸããã ãã®ãããããšãã°ãX-Forwarded- *ãªã¯ãšã¹ãããããŒããªãŒããŒã©ã€ãããããã®ãã§ãã¯ãæšæºã»ããã«å«ããŸããã§ãããããããžã®åå¿ã¯ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠç°ãªããå Žåã«ãã£ãŠã¯ïŒããšãã°ãè€æ°ã®ãããã·ã䜿çšããŠïŒãŸã£ããè§ŠããŠã¯ãããªãããã§ãã ããããèªå®
ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããæ·±ãçè§£ã«åºã¥ããŠãå¿
èŠãªãã§ãã¯ãè¡ãããšãã§ããŸãã ã¯ããçŸåšãGyxyã¯ç§ãã¡ãç¥ã£ãŠããåé¡ã®å
šç¯å²ãç¹å®ããæ¹æ³ãç¥ããŸããããå匷äžã§ãããããªãã®å©ããåããŠãããããããè¯ããããå®å
šã«ãããå§ããŸãã
䜿çšã·ããªãªã«ã€ããŠè©±ãå Žåãç§ãã¡ã¯ããã€ãã®å
žåçãªã±ãŒã¹ãç¹å®ããŸããã
-nginxãã€ã³ã¹ããŒã«ãããŠãããã¹ãç°å¢ã§èµ·åããŸãã
-åäžã®ãããã¯ããã§ãã¯ããããã®Webã¢ããªã±ãŒã·ã§ã³ã ããã¯ãæ§æã®äžå¯©ãªéšåã«ééãããšãã«åœ¹ç«ã¡ãŸãã
-CIãŸãã¯ã·ã³ã¯ã©ã€ã¢ã³ããšçµ±åããããã®HTTP APIã
æãè峿·±ããªãã·ã§ã³ã¯ãã·ã³ã¯ã©ã€ã¢ã³ãã«HTTP APIã䜿çšããããšã§ãã å®éããã®å Žåãå¿
èŠãªãã§ãã¯ãäžå
管çããæŽæ°ããããšãã§ããŸãã 幞ããªããšã«ãnginxã®ææ°ããŒãžã§ã³ã«ã¯ãèšå®ãšãã®ãã³ãããã¹ãããããã®-Tã¹ã€ããããããGixyã¯ãã®åœ¢åŒãè§£æã§ããŸãã
ãããã©ãã»ã©äŸ¿å©ããèªåã§å€æããŠãã ãã$ nginx -T | http -v https://gixy/api/check Content-Type:'application/nginx'
POST /api/check HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 959
Content-Type: application/nginx
Host: gixy
User-Agent: HTTPie/0.9.8
# configuration file /etc/nginx/nginx.conf:
user http;
worker_processes 1;
#daemon on;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
access_log /var/log/nginx/access.log combined;
error_log /var/log/nginx/error.log debug;
include sites/*.conf;
}
# configuration file /etc/nginx/mime.types:
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
}
# configuration file /etc/nginx/sites/default.conf:
server {
listen 80;
return 301 https://some$uri;
}
HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Type: application/json
Date: Tue, 24 Apr 2017 19:45:57 GMT
Keep-Alive: timeout=120
Server: nginx
Transfer-Encoding: chunked
{
"result": [
{
"auditor": "http_splitting",
"config": "\ninclude /etc/nginx/sites/default.conf;\n\n\tserver {\n\t\treturn 301 https://some$uri;\n\t}",
"description": " (\"\\n\") nginx. : rewrite, return proxy_pass.",
"help_url": "https://wiki/product-security/gixy/httpsplitting/",
"reason": "At least variable \"$uri\" can contain \"\\n\"",
"recommendation": " , (eg \"$request_uri\" \"$uri\").",
"severity": "HIGH",
"summary": " HTTP Splitting"
}
],
"status": "ok",
"warnings": []
}
æåŸã«ããããGixyã®æåã®ãããªãã¯ã¢ã«ãã¡ããŒãžã§ã³ã§ãããããåŸæ¹äºææ§ãç¶æããã«APIã倿Žã§ãããšããäºå®ã匷調ããããšæããŸãã ãã®ç¹ã§ãç¬èªã®ãã©ã°ã€ã³ãå®è£
ããå¿
èŠãããå Žåã¯ãIssueãäœæãããããã«ãªã¯ãšã¹ããéä¿¡ããããšããå§ãããŸãããã®åŸãäžç·ã«äœããèããŸãã
ç§ãã¡ã®çµéšãããªãã«ãšã£ãŠè峿·±ããæçã§ãããããããããªããåã³ããªãã®æ§æãåèããããšããããããšãé¡ã£ãŠããŸã;ïŒ