เจธเจพเจกเฉ เจเจฒเจพเจเฉฐเจ เจฆเจพ เจเฉฑเจ เจชเฉเจฐเจคเฉเจจเจฟเจงเฉ, เจเจฟเจธเจฆเจพ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจธเจเฉเจ เจฎเจพเจเจเฉเจฐเฉเจธเจพเฉฑเจซเจ (เจ
เจเจผเฉเจฐ) เจคเฉเจ เจเจฒเจพเจเจก เจตเจฟเฉฑเจ เจฐเจนเจฟเฉฐเจฆเจพ เจนเฉ, เจจเฉ เจเฉฑเจ เจธเจฎเฉฑเจธเจฟเจ เจจเฉเฉฐ เจธเฉฐเจฌเฉเจงเจฟเจค เจเฉเจคเจพ: เจนเจพเจฒ เจนเฉ เจตเจฟเฉฑเจ, เจฏเฉเจฐเจช เจคเฉเจ เจเฉเจ เจเจพเจนเจเจพเจ เจฆเฉเจเจ เจเฉเจ เจฌเฉเจจเจคเฉเจเจ เจเจฒเจคเฉ 400 (XNUMX) เจจเจพเจฒ เจเจคเจฎ เจนเฉเจฃเฉเจเจ เจธเจผเฉเจฐเฉ เจนเฉเจเจเจเฅค
เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ เจเจชเฉเจเจ เจนเฉ, เจเจฟเจธ เจฐเจพเจนเฉเจ เจธเจพเจฐเฉ เจเฉเจฐเฉเจซเจฟเจ เจเจเจฐเจเจพเจฐ เจเจเจเจฆเฉ เจนเจจ. เจเจน เจเฉเจฐเฉเจซเจฟเจ HTTP เจธเจฐเจตเจฐ เจฆเฉเจเจฐเจพ เจธเฉเจฃเจฟเจ เจเจพเจเจฆเจพ เจนเฉ
Ingress เจตเจฟเฉฑเจ เจเจฒเจคเฉ เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเจฟเจเจพเจ เจฆเจฟเฉฑเจคเฉ:
{
"number_fields":{
"status":400,
"request_time":0.001,
"bytes_sent":465,
"upstream_response_time":0,
"upstream_retries":0,
"bytes_received":2328
},
"stream":"stdout",
"string_fields":{
"ingress":"app",
"protocol":"HTTP/1.1",
"request_id":"f9ab8540407208a119463975afda90bc",
"path":"/api/sign-in",
"nginx_upstream_status":"400",
"service":"app",
"namespace":"production",
"location":"/front",
"scheme":"https",
"method":"POST",
"nginx_upstream_response_time":"0.000",
"nginx_upstream_bytes_received":"120",
"vhost":"api.app.example.com",
"host":"api.app.example.com",
"user":"",
"address":"83.41.81.250",
"nginx_upstream_addr":"10.240.0.110:80",
"referrer":"https://api.app.example.com/auth/login?long_encrypted_header",
"service_port":"http",
"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
"time":"2019-03-06T18:29:16+00:00",
"content_kind":"cache-headers-not-present",
"request_query":""
},
"timestamp":"2019-03-06 18:29:16",
"labels":{
"app":"nginx",
"pod-template-generation":"6",
"controller-revision-hash":"1682636041"
},
"namespace":"kube-nginx-ingress",
"nsec":6726612,
"source":"kubernetes",
"host":"k8s-node-55555-0",
"pod_name":"nginx-v2hcb",
"container_name":"nginx",
"boolean_fields":{}
}
เจเจธเฉ เจธเจฎเฉเจ, เจเฉเจธเจเจฐเจฒ เจจเฉ เจฆเจฟเฉฑเจคเจพ:
HTTP/1.1 400 Bad Request
Connection: close
Date: Wed, 06 Mar 2019 12:34:20 GMT
Server: Kestrel
Content-Length: 0
เจตเฉฑเจง เจคเฉเจ เจตเฉฑเจง เจตเจฐเจฌเฉเจธเจฟเจเฉ เจฆเฉ เจจเจพเจฒ เจตเฉ, เจเฉเจธเจเจฐเจฒ เจเจฒเจคเฉ เจฌเจนเฉเจค เจเจผเจฟเจเจฆเจพ เจนเฉ เจฅเฉเฉเฉ เจฒเจพเจญเจฆเจพเจเจ เจเจพเจฃเจเจพเจฐเฉ:
{
"number_fields":{"ThreadId":76},
"stream":"stdout",
"string_fields":{
"EventId":"{"Id"=>17, "Name"=>"ConnectionBadRequest"}",
"SourceContext":"Microsoft.AspNetCore.Server.Kestrel",
"ConnectionId":"0HLL2VJSST5KV",
"@mt":"Connection id "{ConnectionId}" bad request data: "{message}"",
"@t":"2019-03-07T13:06:48.1449083Z",
"@x":"Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Malformed request: invalid headers.n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection.TryParseRequest(ReadResult result, Boolean& endConnection)n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.<ProcessRequestsAsync>d__185`1.MoveNext()",
"message":"Malformed request: invalid headers."
},
"timestamp":"2019-03-07 13:06:48",
"labels":{
"pod-template-hash":"2368795483",
"service":"app"
},
"namespace":"production",
"nsec":145341848,
"source":"kubernetes",
"host":"k8s-node-55555-1",
"pod_name":"app-67bdcf98d7-mhktx",
"container_name":"app",
"boolean_fields":{}
}
เจ เจเจฟเจนเจพ เจฒเจเจฆเจพ เจนเฉ เจเจฟ เจธเจฟเจฐเจซ tcpdump เจเจธ เจธเจฎเฉฑเจธเจฟเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจตเจฟเฉฑเจ เจฎเจฆเจฆ เจเจฐเฉเจเจพ... เจชเจฐ เจฎเฉเจ เจเฉเจฐเฉเจซเจฟเจ เจเฉเจจ เจฌเจพเจฐเฉ เจฆเฉเจนเจฐเจพเจตเจพเจเจเจพ:
เจเจพเจเจ
เจธเจชเฉฑเจธเจผเจ เจคเฉเจฐ 'เจคเฉ, เจเจตเจพเจเจพเจ เจจเฉเฉฐ เจธเฉเจฃเจจเจพ เจฌเจฟเจนเจคเจฐ เจนเฉ เจเจธ เจเจพเจธ เจจเฉเจก 'เจคเฉ, เจเจฟเฉฑเจฅเฉ เจเฉเจฌเจฐเจจเฉเจเจธ เจจเฉ เจเฉฑเจ เจชเฉเจก เจคเฉเจจเจพเจค เจเฉเจคเจพ เจนเฉ: เจกเฉฐเจช เจฆเฉ เจฎเจพเจคเจฐเจพ เจ เจเจฟเจนเฉ เจนเฉเจตเฉเจเฉ เจเจฟ เจเฉฑเจเฉ เจเฉฑเจ เจเฉเจ เจเจฒเจฆเฉ เจฒเฉฑเจญเจฃเจพ เจธเฉฐเจญเจต เจนเฉเจตเฉเจเจพ. เจ เจคเฉ เจตเจพเจธเจคเจต เจตเจฟเฉฑเจ, เจเจธเจฆเฉ เจเจพเจเจ เจเจฐเจฆเฉ เจธเจฎเฉเจ, เจนเฉเจ เจฆเจฟเฉฑเจคเฉ เจซเจฐเฉเจฎ เจจเฉเฉฐ เจฆเฉเจเจฟเจ เจเจฟเจ เจธเฉ:
GET /back/user HTTP/1.1
Host: api.app.example.com
X-Request-ID: 27ceb14972da8c21a8f92904b3eff1e5
X-Real-IP: 83.41.81.250
X-Forwarded-For: 83.41.81.250
X-Forwarded-Host: api.app.example.com
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Original-URI: /front/back/user
X-Scheme: https
X-Original-Forwarded-For: 83.41.81.250
X-Nginx-Geo-Client-Country: Spain
X-Nginx-Geo-Client-City: M.laga
Accept-Encoding: gzip
CF-IPCountry: ES
CF-RAY: 4b345cfd1c4ac691-MAD
CF-Visitor: {"scheme":"https"}
pragma: no-cache
cache-control: no-cache
accept: application/json, text/plain, */*
origin: https://app.example.com
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36
referer: https://app.example.com/auth/login
accept-language: en-US,en;q=0.9,en-GB;q=0.8,pl;q=0.7
cookie: many_encrypted_cookies; .AspNetCore.Identity.Application=something_encrypted;
CF-Connecting-IP: 83.41.81.250
True-Client-IP: 83.41.81.250
CDN-Loop: cloudflare
HTTP/1.1 400 Bad Request
Connection: close
Date: Wed, 06 Mar 2019 12:34:20 GMT
Server: Kestrel
Content-Length: 0
เจกเฉฐเจช เจฆเจพ เจจเฉเฉเจฟเจเจ เจจเจฟเจฐเฉเจเจฃ เจเจฐเจจ 'เจคเฉ เจเจน เจธเจผเจฌเจฆ เจจเจเจผเจฐ เจเจเจ M.laga
. เจเจน เจ
เฉฐเจฆเจพเจเจผเจพ เจฒเจเจพเจเจฃเจพ เจเจธเจพเจจ เจนเฉ เจเจฟ เจธเจชเฉเจจ เจตเจฟเฉฑเจ เจเฉเจ M.laga เจธเจผเจนเจฟเจฐ เจจเจนเฉเจ เจนเฉ (เจชเจฐ เจเฉฑเจฅเฉ เจนเฉ
ingress.kubernetes.io/configuration-snippet: |
proxy_set_header X-Nginx-Geo-Client-Country $geoip_country_name;
proxy_set_header X-Nginx-Geo-Client-City $geoip_city;
เจเจนเจจเจพเจ เจธเจฟเจฐเจฒเฉเจเจพเจ เจฆเฉ เจ เฉฑเจเฉ เจญเฉเจเจฃ เจจเฉเฉฐ เจ เจฏเฉเจ เจเจฐเจจ เจคเฉเจ เจฌเจพเจ เจฆ, เจธเจญ เจเฉเจ เจ เฉเจ เจนเฉ เจเจฟเจ! (เจเจน เจเฉเจคเฉ เจนเฉ เจธเจชเฉฑเจธเจผเจ เจนเฉ เจเจฟเจ เจเจฟ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจนเฉเจฃ เจเจนเจจเจพเจ เจธเจฟเจฐเจฒเฉเจเจพเจ เจฆเฉ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉเฅค)
เจเจ เจนเฉเจฃ เจธเจฎเฉฑเจธเจฟเจ เจตเฉฑเจฒ เจงเจฟเจเจจ เจฆเฉเจเจ เจนเฉเจฐ เจเจฎ เจคเฉเจฐ 'เจคเฉ. เจจเฉเฉฐ เจเฉเจฒเจจเฉเฉฑเจ เจฌเฉเจจเจคเฉ เจเจฐเจเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฆเฉ เจ
เฉฐเจฆเจฐ เจเจธเจจเฉเฉฐ เจเจธเจพเจจเฉ เจจเจพเจฒ เจฆเฉเจฌเจพเจฐเจพ เจคเจฟเจเจฐ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉ localhost:80
:
GET /back/user HTTP/1.1
Host: api.app.example.com
cache-control: no-cache
accept: application/json, text/plain, */*
origin: https://app.example.com
Cookie: test=Desiree
... เจตเจพเจชเจธเฉ 401 Unauthorized
, เจเจฎเฉเจฆ เจ
เจจเฉเจธเจพเจฐ. เจเฉ เจนเฉเฉฐเจฆเจพ เจนเฉ เจเฉเจเจฐ เจ
เจธเฉเจ เจเจฐเจฆเฉ เจนเจพเจ:
GET /back/user HTTP/1.1
Host: api.app.example.com
cache-control: no-cache
accept: application/json, text/plain, */*
origin: https://app.example.com
Cookie: test=Dรฉsirรฉe
?
เจตเจพเจชเจธ เจเจตเฉเจเจพ 400 Bad request
- เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฒเฉเจ เจตเจฟเฉฑเจ เจธเจพเจจเฉเฉฐ เจเฉฑเจ เจเจฒเจคเฉ เจฎเจฟเจฒเฉเจเฉ เจเฉ เจธเจพเจกเฉ เจฒเจ เจชเจนเจฟเจฒเจพเจ เจคเฉเจ เจเจพเจฃเฉ เจนเฉ:
{
"@t":"2019-03-31T12:59:54.3746446Z",
"@mt":"Connection id "{ConnectionId}" bad request data: "{message}"",
"@x":"Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Malformed request: invalid headers.n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection.TryParseRequest(ReadResult result, Boolean& endConnection)n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.<ProcessRequestsAsync>d__185`1.MoveNext()",
"ConnectionId":"0HLLLR1J974L9",
"message":"Malformed request: invalid headers.",
"EventId":{
"Id":17,
"Name":"ConnectionBadRequest"
},
"SourceContext":"Microsoft.AspNetCore.Server.Kestrel",
"ThreadId":71
}
เจจเจคเฉเจเฉ
เจเจพเจธ เจคเฉเจฐ 'เจคเฉ เจเฉเจธเจเจฐเจฒ
เจธเจพเจกเฉ เจเฉเจธ เจตเจฟเฉฑเจ เจเฉฑเจ เจตเจพเจงเฉ เจเจพเจฐเจ เจเจน เจนเฉ เจเจฟ เจเจฒเจพเจเฉฐเจ เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจตเจฟเฉฑเจ เจเฉเจธเจเจฐเจฒ เจฆเฉ เจฒเจพเจเฉเจเจฐเจจ เจจเฉเฉฐ เจฌเจฆเจฒเจฃ เจฆเฉ เจฏเฉเจเจจเจพ เจจเจนเฉเจ เจฌเจฃเจพเจเจเจฆเจพ. เจนเจพเจฒเจพเจเจเจฟ, AspNetCore เจตเจฟเฉฑเจ เจนเฉ เจฎเฉเฉฑเจฆเฉ (
เจธเฉฐเจเฉเจช เจตเจฟเฉฑเจ: เจจเฉเจ เจนเฉเจฃ เจเฉเจธเจเจฐเจฒ เจเจพเจ UTF-8 (2019 เจตเจฟเฉฑเจ?!) เจฆเฉเจเจ เจเจพเจธ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจฌเจพเจฐเฉ เจจเจนเฉเจ เจนเฉ, เจชเจฐ เจเจธ เจคเฉฑเจฅ เจฌเจพเจฐเฉ เจนเฉ เจเจฟ เจงเจฟเจเจจ เจ เจคเฉ เจจเจฟเจฐเฉฐเจคเจฐ เจ เจงเจฟเจเจจ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจฆเฉ เจเฉเจ เจเจฐเจฆเฉ เจนเฉเจ เจคเฉเจนเจพเจกเฉ เจฆเฉเจเจฐเจพ เจเฉเฉฑเจเจฟเจ เจเจฟเจ เจนเจฐ เจเจฆเจฎ เจเจฒเจฆเฉ เจเจพเจ เจฌเจพเจ เจฆ เจตเจฟเฉฑเจ เจซเจฒ เจฆเฉเจตเฉเจเจพเฅค เจเฉเจธเจผเจเจฟเจธเจฎเจคเฉ!
PS
เจธเจพเจกเฉ เจฌเจฒเฉเจ 'เจคเฉ เจตเฉ เจชเฉเฉเจนเฉ:
- ยซ
เจเฉเจฌเจฐเจจเฉเจเจธ [เจ เจคเฉ เจเจจเฉเจนเจพเจ เจฆเฉ เจนเฉฑเจฒ] เจฆเฉ เจธเฉฐเจเจพเจฒเจจ เจตเจฟเฉฑเจ 6 เจฎเจจเฉเจฐเฉฐเจเจ เจธเจฟเจธเจเจฎ เจฌเฉฑเจ "; - ยซ
เจเฉเจฌเจฐเจจเฉเจเจธ เจเจฟเจชเจธ เจ เจคเฉ เจเฉเจฐเจฟเจเจธ: NGINX เจเจจเจเจฐเฉเจธ เจตเจฟเฉฑเจ เจเจธเจเจฎ เจเจฐเจฐ เจชเฉเจ "; - ยซ
เจเฉเจฌเจฐเจจเฉเจเจธ เจฒเจ เจเฉฐเจเฉเจฐเฉเจธ เจเฉฐเจเจฐเฉเจฒเจฐเจพเจ เจฆเฉ เจธเฉฐเจเฉเจช เจเจพเจฃเจเจพเจฐเฉ เจ เจคเฉ เจคเฉเจฒเจจเจพ "; - ยซ
เจเฉเจฌเจฐเจจเฉเจเจธ เจจเฉเจกเจธ เจฆเฉ เจตเจฟเจเจเจพเจฐ เจชเจฟเฉฐเจเจพเจ เจฆเฉ เจจเจฟเจเจฐเจพเจจเฉ เจเจฐเจจเจพ - เจธเจพเจกเฉ เจตเจฟเจ เฉฐเจเจจ "; - ยซ
เจฒเฉเจจเจเจธ เจจเฉเฉฑเจเจตเจฐเจ เจธเจฌ-เจธเจฟเจธเจเจฎ เจฌเจพเจฐเฉ 3 โโเจ เจธเจพเจงเจพเจฐเจจ เจฎเจพเจฎเจฒเฉ ".
เจธเจฐเฉเจค: www.habr.com