Gunicorn: http 응닡 헀더 μ„œλ²„ 속성을 λ§ˆμŠ€ν‚Ήν•˜λŠ” κΈ°λŠ₯

에 λ§Œλ“  2014λ…„ 07μ›” 24일  Β·  36μ½”λ©˜νŠΈ  Β·  좜처: benoitc/gunicorn

ν˜„μž¬ λͺ¨λ“  μ‘λ‹΅μ—λŠ” http 헀더가 μžˆμŠ΅λ‹ˆλ‹€.
μ„œλ²„: gunicorn/19.0.0

λ³΄μ•ˆμƒμ˜ 이유둜 μ‚¬λžŒλ“€μ΄ gunicornμ—μ„œ λ³΄μ•ˆ 취약점을 κ²€μƒ‰ν•˜λŠ” 것을 μ•Œ 수 없도둝 λ§ˆμŠ€ν‚Ήν•  수 있기λ₯Ό λ°”λžλ‹ˆλ‹€. λ§ˆμŠ€ν‚Ήν•  방법이 μ—†μ„κΉŒμš”? μ•„λ§ˆλ„ 섀정을 톡해?

Improvement FeaturCore To DO

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λΆˆν–‰νžˆλ„ @mathiasverhoeven 은 μ–΄λ–€ 이유둜 PR을

ν—€λ”μ˜ 양을 ν‚€-κ°’ 쌍으둜 지정할 수 μžˆλŠ” --set-headers μ—μ„œμ™€ 같이 여기에 더 일반적인 μ˜΅μ…˜μ„ κ°–λŠ” 것이 λΆˆκ°€λŠ₯ν•©λ‹ˆκΉŒ? 빈 값은 헀더λ₯Ό μ™„μ „νžˆ μƒλž΅ν•©λ‹ˆλ‹€.

ν˜„μž¬ Server λ₯Ό μ‘°μ •ν•˜κ³  μ‹Άμ§€λ§Œ X-Product: MyProduct 와 같은 응닡 헀더λ₯Ό ν•˜λ‚˜ 더 μΆ”κ°€ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

@mathiasverhoeven 의 PR 을 기반으둜 무언가λ₯Ό ν•¨κ»˜ 던질 수 μžˆμŠ΅λ‹ˆλ‹€. @benoitc 와 @tilgovi μ–΄λ–»κ²Œ μƒκ°ν•˜μ„Έμš”?

λͺ¨λ“  36 λŒ“κΈ€

일반적으둜 gunicorn은 ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œ nginx와 같은 λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„ 뒀에 배포되며 nginxλŠ” 자체 Server νƒœκ·Έλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

μœ„μΈ΅ ν”ŒλŸ¬μŠ€ ν•˜λ‚˜

@benoitc λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ…λ Ήμ€„μ—μ„œ μ˜΅μ…˜μ„ μ œμ•ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ–΄λ–»κ²Œ μƒκ°ν•˜μ„Έμš”? 그렇지 μ•ŠμœΌλ©΄ @georgexsh μ—μ„œ μ„€λͺ…ν•œ λŒ€λ‘œ 이 티켓을 닫을 κ²ƒμž…λ‹ˆλ‹€. ν”„λ‘œλ•μ…˜ λͺ¨λ“œμ—μ„œλŠ” μ—­λ°©ν–₯ ν”„λ‘μ‹œ(nginx, apache, ...)λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

post_request ν›„ν¬μ—μ„œ ν™˜κ²½μ„ μˆ˜μ •ν•  수 μ—†μŠ΅λ‹ˆκΉŒ?

@tilgovi κ°€ μž‘λ™ν•˜λŠ” 것 κ°™κ΅°μš”... κ·Έλ ‡λ‹€λ©΄ λ‹€λ₯Έ μ˜΅μ…˜μ„ λ§Œλ“€μ–΄μ•Ό ν•˜λŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€...

μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μš”μ²­μ€ ν•΄λ‹Ή μ§€μ μ—μ„œ 이미 μ „μ†‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

@tilgovi 미듀웨어도 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. Server κ°€ κΈ°λ³Έ 헀더에 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ„œλ²„ 헀더λ₯Ό μ™„μ „νžˆ μ œκ±°ν•˜λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”?

+1

헀더 값을 μž„μ˜μ˜ λ¬Έμžμ—΄λ‘œ μ„€μ •ν•  수 μžˆλ‹€λ©΄ 헀더λ₯Ό μ™„μ „νžˆ μ œκ±°ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

+1

헀더λ₯Ό μ œκ±°ν•˜λ €λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

κ³Όκ±°μ—λŠ” μ„œλ²„ μ†Œν”„νŠΈμ›¨μ–΄ 및 버전을 숨기기 μœ„ν•΄ λ°°ν¬μ—μ„œ 헀더λ₯Ό μ œκ±°ν•˜μ—¬ μ•Œλ €μ§„ μ΅μŠ€ν”Œλ‘œμž‡μ΄ μžˆλŠ” μ„œλ²„λ₯Ό ν¬λ‘€λ§ν•˜λŠ” μ‚¬λžŒμ΄ μ„ νƒν•˜μ§€ μ•Šλ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.

예. λ³΄μ•ˆμ΄ 이유 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. λ¬Όλ‘  Server 값을 μž„μ˜μ˜ κ°’μœΌλ‘œ λ³€κ²½ν•  수 μžˆμ§€λ§Œ μ‹€μ œλ‘œ ν•„μš”ν•˜μ§€ μ•Šμ€ μΆ”κ°€ λ°”μ΄νŠΈλ₯Ό λ³΄λ‚΄λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

λ‚˜λŠ” 이 κΈ°λŠ₯에 λŒ€ν•œ 홍보λ₯Ό 자유둭게 ν–ˆμŠ΅λ‹ˆλ‹€: #1384 . 그것은 ν•œλ™μ•ˆ λ‚΄ 희망 λͺ©λ‘μ—μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

토둠에 μΆ”κ°€ν•˜λ €λ©΄: 일뢀 μ—­ ν”„λ‘μ‹œ μ„œλ²„λŠ” Server 헀더λ₯Ό μˆ˜μ •ν•˜μ§€λ§Œ μΌλΆ€λŠ” https://www.w3.org/Protocols/에 μ„€λͺ…λœ λŒ€λ‘œ Via 헀더λ₯Ό μΆ”κ°€ν•œλ‹€κ³  μ£Όμž₯ν•©λ‹ˆλ‹€. rfc2616/rfc2616-sec14.html#sec14.38

λΆˆν–‰νžˆλ„ @mathiasverhoeven 은 μ–΄λ–€ 이유둜 PR을

ν—€λ”μ˜ 양을 ν‚€-κ°’ 쌍으둜 지정할 수 μžˆλŠ” --set-headers μ—μ„œμ™€ 같이 여기에 더 일반적인 μ˜΅μ…˜μ„ κ°–λŠ” 것이 λΆˆκ°€λŠ₯ν•©λ‹ˆκΉŒ? 빈 값은 헀더λ₯Ό μ™„μ „νžˆ μƒλž΅ν•©λ‹ˆλ‹€.

ν˜„μž¬ Server λ₯Ό μ‘°μ •ν•˜κ³  μ‹Άμ§€λ§Œ X-Product: MyProduct 와 같은 응닡 헀더λ₯Ό ν•˜λ‚˜ 더 μΆ”κ°€ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

@mathiasverhoeven 의 PR 을 기반으둜 무언가λ₯Ό ν•¨κ»˜ 던질 수 μžˆμŠ΅λ‹ˆλ‹€. @benoitc 와 @tilgovi μ–΄λ–»κ²Œ μƒκ°ν•˜μ„Έμš”?

https://www.fastly.com/blog/headers-we-dont-want에 이것을 남겨 λ‘‘λ‹ˆλ‹€ Server ν—€λ”λŠ” 맀우 일반적이고 μ™„μ „νžˆ λΆˆν•„μš”ν•©λ‹ˆλ‹€.

λ˜ν•œ Server 헀더λ₯Ό μƒλž΅ν•  수 있기λ₯Ό λ°”λžλ‹ˆλ‹€. λ‚˜λŠ” HiawathaλΌλŠ” λ³΄μ•ˆ 쀑심 μ›Ή μ„œλ²„λ₯Ό μ‚¬μš©ν•˜μ—¬ 자체 μ„œλ²„ 헀더λ₯Ό μΆ”κ°€ν•˜μ§€ μ•Šλ„λ‘ μ„€μ •ν•˜μ—¬ μ—­ ν”„λ‘μ‹œλ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ gunicorn의 Server 헀더가 ν˜„μž¬ ν΄λΌμ΄μ–ΈνŠΈμ— μ „λ‹¬λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

@tuukkamustonen 의 μ•„μ΄λ””μ–΄λŠ” λ‚˜μ—κ²Œ μ’‹κ²Œ λ“€λ¦½λ‹ˆλ‹€. :)

νŽΈμ§‘: 방금 https://github.com/benoitc/gunicorn/pull/1617을 λ³΄μ•˜μŠ΅λ‹ˆλ‹€ server_tokens = true|false|string 은(λŠ”) μ’‹μŠ΅λ‹ˆλ‹€.

ν”ŒλΌμŠ€ν¬λ₯Ό μ‹€ν–‰ν•˜λŠ” μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ? https://stackoverflow.com/a/46858238/452210 은 process_response λž˜ν•‘ 및 μž¬μ •μ˜λ₯Ό μ œμ•ˆν•˜κ³  헀더λ₯Ό κ΅μ²΄ν•˜κ±°λ‚˜ μ œκ±°ν•©λ‹ˆλ‹€.

λ˜ν•œ Server 헀더λ₯Ό μƒλž΅ν•  수 있기λ₯Ό λ°”λžλ‹ˆλ‹€. λ‚˜λŠ” HiawathaλΌλŠ” λ³΄μ•ˆ 쀑심 μ›Ή μ„œλ²„λ₯Ό μ‚¬μš©ν•˜μ—¬ 자체 μ„œλ²„ 헀더λ₯Ό μΆ”κ°€ν•˜μ§€ μ•Šλ„λ‘ μ„€μ •ν•˜μ—¬ μ—­ ν”„λ‘μ‹œλ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ gunicorn의 Server 헀더가 ν˜„μž¬ ν΄λΌμ΄μ–ΈνŠΈμ— μ „λ‹¬λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 심지어 cloudflareκ°€ μ„œλ²„ 헀더λ₯Ό ν‘œμ‹œν•˜κ³  μžˆλ‹€λŠ” 것을 μ•Œμ•„μ°¨λ Έκ³ , κ·Έλž˜μ„œ μš”μ¦˜μ€ λͺ…성보닀 λ³΄μ•ˆμ΄ 더 μ€‘μš”ν•œμ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

λͺ…λ Ήμ€„μ΄λ‚˜ ꡬ성에 λ‹€λ₯Έ μ˜΅μ…˜μ„ μΆ”κ°€ν•˜λŠ” λŒ€μ‹  ν—€λ”μ—μ„œ 버전을 μ œκ±°ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€. 그런 λ‹€μŒ ꡬ성 파일 μ „μš© 섀정을 μΆ”κ°€ν•˜μ—¬ server_token을 μ œκ±°ν•˜μ‹­μ‹œμ˜€. κ·Έκ²ƒμ˜ μž₯점은 μƒˆ λ²„μ „μœΌλ‘œ μ •μƒμ μœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œν•˜λŠ” μ„œλ²„κ°€ μ„œλΉ„μŠ€λ₯Ό μ€‘μ§€ν•˜μ§€ μ•Šκ³  ν•΄λ‹Ή 섀정을 μΆ”κ°€ν•  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 생각?

λ‚˜λŠ” 심지어 cloudflareκ°€ μ„œλ²„ 헀더λ₯Ό ν‘œμ‹œν•˜κ³  μžˆλ‹€λŠ” 것을 μ•Œμ•„μ°¨λ Έκ³ , κ·Έλž˜μ„œ μš”μ¦˜μ€ λͺ…성보닀 λ³΄μ•ˆμ΄ 더 μ€‘μš”ν•œμ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

Cloudflare의 μ„œλΉ„μŠ€ 및 μ„œλ²„ ν—€λ”λŠ” κ°œλ³„ μ‚¬μ΄νŠΈμ˜ μ„œλ²„μ™€ λ‹€λ₯Έ μ»¨ν…μŠ€νŠΈλ₯Ό 가지고 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ‚¬μ΄νŠΈκ°€ Cloudflareλ₯Ό 톡해 μ—­ ν”„λ‘μ‹œλ˜λŠ” 경우 ν”„λ‘μ‹œλ₯Ό μˆ˜ν–‰ν•˜λŠ” 것이 CloudflareλΌλŠ” 사싀은 달리 μ•Œλ €μ§€μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 그것은 λ„€μž„μ„œλ²„ 및/λ˜λŠ” IP μ£Όμ†Œ 등을 톡해 λͺ…λ°±ν•©λ‹ˆλ‹€. λŒ€μ‘°μ μœΌλ‘œ 제3자 μ—­λ°©ν–₯ ν”„λ‘μ‹œκ°€ μ—†λŠ” VPSμ—μ„œ μ‚¬μ΄νŠΈλ₯Ό ν˜ΈμŠ€νŒ…ν•˜λŠ” 것은 잠재적으둜 μ„œλ²„ μ†Œν”„νŠΈμ›¨μ–΄μ˜ HTTP 헀더λ₯Ό ν†΅ν•œ 직접적인 식별을 ν”Όν•  수 μžˆλ‹€λŠ” 희망을 μ€λ‹ˆλ‹€. (λ¬Όλ‘  gunicorn이 λ―Έλž˜μ— 취약점이 μžˆλŠ” κ²ƒμœΌλ‘œ λ°ν˜€μ§€λ©΄ λ‹¨μˆœνžˆ μ„œλ²„ 헀더λ₯Ό κ²€μƒ‰ν•˜λŠ” 것보닀 ν‘œμ μ„ μ°ΎλŠ” 것이 더 μ–΄λ €μšΈ 것이라고 μƒκ°ν•©λ‹ˆλ‹€.)

λͺ…λ Ήμ€„μ΄λ‚˜ ꡬ성에 λ‹€λ₯Έ μ˜΅μ…˜μ„ μΆ”κ°€ν•˜λŠ” λŒ€μ‹  ν—€λ”μ—μ„œ 버전을 μ œκ±°ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€. 그런 λ‹€μŒ ꡬ성 파일 μ „μš© 섀정을 μΆ”κ°€ν•˜μ—¬ server_token을 μ œκ±°ν•˜μ‹­μ‹œμ˜€. κ·Έκ²ƒμ˜ μž₯점은 μƒˆ λ²„μ „μœΌλ‘œ μ •μƒμ μœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œν•˜λŠ” μ„œλ²„κ°€ μ„œλΉ„μŠ€λ₯Ό μ€‘μ§€ν•˜μ§€ μ•Šκ³  ν•΄λ‹Ή 섀정을 μΆ”κ°€ν•  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 생각?

정말 쒋을 κ²ƒμž…λ‹ˆλ‹€. :+1: :μ•½κ°„_μ›ƒλŠ”_μ–Όκ΅΄:

예, μ΅œμ†Œν•œ 버전을 μ œκ±°ν•˜μ‹­μ‹œμ˜€. 버전은 λͺ…성에 아무 것도 μΆ”κ°€ν•˜μ§€ μ•ŠμœΌλ©° κ³΅κ²©μžμ—κ²Œ λ§Žμ€ μ‹œκ°„μ„ μ ˆμ•½ν•©λ‹ˆλ‹€.

버전을 μ œκ±°ν•  μƒκ°μž…λ‹ˆλ‹€. @tilgovi 그것에 λŒ€ν•΄ μ–΄λ–€ 생각이 μžˆμŠ΅λ‹ˆκΉŒ?

λ‚˜λ₯Ό μœ„ν•΄ μ’‹μ•„!

이것에 진전이 μžˆμŠ΅λ‹ˆκΉŒ? 이것은 λ³΄μ•ˆμ„ μœ„ν•œ λΉ λ₯Έ 승리처럼 λ³΄μž…λ‹ˆλ‹€.

그것은 λ‹€μŒ 20.1의 일뢀가 될 κ²ƒμž…λ‹ˆλ‹€

버전을 μ œκ±°ν•  μƒκ°μž…λ‹ˆλ‹€.

μ„œλ²„ 헀더λ₯Ό μ™„μ „νžˆ μ œκ±°ν•˜λŠ” ꡬ성 파일 μ „μš© 섀정이 아직 κ³„νšλ˜μ–΄ μžˆμŠ΅λ‹ˆκΉŒ?

@DavidOliver μ™œ 질문

@benoitc λ‚΄κ°€ μΈμš©ν•œ κ·€ν•˜μ˜ μ˜κ²¬μ€ "κ·Έλƒ₯"/제거될 버전 번호만 μ˜λ―Έν•˜λŠ” κ²ƒμœΌλ‘œ 해석될 수 μžˆλŠ” 반면, λŒ€ν™” μ΄ˆλ°˜μ— μ„œλ²„ 헀더λ₯Ό μ™„μ „νžˆ μ œκ±°ν•˜λŠ” μ„€μ •(μ œκ°€ ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€)은 κ³ λ € μ€‘μž…λ‹ˆλ‹€.

감사 ν•΄μš”.

μ„œλ²„ 헀더λ₯Ό μ™„μ „νžˆ μ œκ±°ν•  수 μžˆλ‹€λ©΄ κ·Έλ ‡κ²Œ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 그것을 μ œκ±°ν•˜λŠ” 것이
λ³΄μ•ˆ. μ§€λ‚œ 10λ…„ λ™μ•ˆ λ¬Έμ œκ°€ λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ³΄μ•ˆ
λͺ¨ν˜Έν•¨λ„ 도움이 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ¬Έμ œκ°€ μžˆλ‹€λŠ” 것을 μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€.
그것을 κ³ μΉœλ‹€. λ˜ν•œ μ„œλ²„λ₯Ό μ•Œλ©΄ μž‘μ—…μ— 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

이 버전이 μ œκ³΅ν•˜λŠ” ν˜„μž¬ 버전을 μ œκ±°ν•˜λŠ” κ²½ν–₯이 μžˆμŠ΅λ‹ˆλ‹€.
μ„œλ²„ μœ μ§€ 관리 방법에 λŒ€ν•œ 정보가 λ„ˆλ¬΄ λ§ŽμŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” κ·Έκ²ƒμ„ν•΄μ•Όν•©λ‹ˆλ‹€
μš°λ¦¬κ°€ μœ μ§€ ν•œ 각 지점.

생각?

λ² λˆ„μ•„

2019λ…„ 12μ›” 29일 μΌμš”μΌ 04:23 Randall Leeds [email protected]μ—μ„œ λ‹€μŒκ³Ό 같이 μΌμŠ΅λ‹ˆλ‹€.

μ„œλ²„ 헀더λ₯Ό μ™„μ „νžˆ μ œκ±°ν•  수 μžˆλ‹€λ©΄ κ·Έλ ‡κ²Œ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

β€”
당신이 μ–ΈκΈ‰λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 이것을 λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.
이 이메일에 직접 λ‹΅μž₯ν•˜κ³  GitHubμ—μ„œ ν™•μΈν•˜μ„Έμš”.
https://github.com/benoitc/gunicorn/issues/825?email_source=notifications&email_token=AAADRIQBGN2KQRKOKLAYK43Q3AJ2PA5CNFSM4ASCOWF2YY3PNVWWK3TUL52HS4DFVREXG43VMXHJ63LNMV
λ˜λŠ” ꡬ독 μ·¨μ†Œ
https://github.com/notifications/unsubscribe-auth/AAADRISEUFGD43CKXLV3EZTQ3AJ2PANCNFSM4ASCOWFQ
.

>

λ‚΄ λͺ¨λ°”μΌμ—μ„œ 보낸

μ•ˆλ…•,

데이터가 μžˆλŠ” 연결을 톡해 응닡을 μ œκ³΅ν•˜κΈ° μœ„ν•΄ gunicorn을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
λΉ„μ‹Έκ³ , λ‚΄κ°€ μ œκ±°ν•  수 μžˆλŠ” 것은 λ‚΄κ°€ μ§€λΆˆν•  ν•„μš”κ°€ μ—†λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ„œλ²„ ν—€λ”λŠ” μž‘μ§€λ§Œ μž‘μ€ 것이 μΆ”κ°€λ˜κ³  λ•Œλ‘œλŠ”
μž‘μ€ 것은 μ›λ¦¬μŠ€ νŒ¨ν‚·μ— λͺ¨λ“  것을 담을 수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.
버전이 μžˆλŠ” μ„œλ²„ ν—€λ”λŠ” νŽ˜μ΄λ‘œλ“œμ˜ μ•½ 1.7%인 24λ°”μ΄νŠΈμž…λ‹ˆλ‹€.
1460의 MSS 및 TLS 헀더λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μΆ”κ°€ νŒ¨ν‚· 없이도
더 큰 νŒ¨ν‚·μ€ μ™„μ „νžˆ μž¬μ „μ†‘ν•΄μ•Ό ν•  κ°€λŠ₯성이 훨씬 더 λ†’μŠ΅λ‹ˆλ‹€.
연결이 쒋지 μ•Šμ„ λ•Œ(원격 μž₯μ†Œμ— μžˆλŠ” μ…€λ£°λŸ¬ λ„€νŠΈμ›Œν¬μ™€ 같이).

μƒˆλ‘œμš΄ HTTPS μ—°κ²°μ—μ„œ ν•Έλ“œμ…°μ΄ν¬ 및 μΈμ¦μ„œ
κ΅ν™˜μ€ νŽ˜μ΄λ‘œλ“œλ₯Ό μ΅œλŒ€ν•œ ν™œμš©ν•˜κ³  μž‘μ€ 것은
λ¬΄μ‹œ. μ—°κ²° μœ μ§€, 쀑볡을 μ‚¬μš©ν•˜λŠ” μ†Œκ·œλͺ¨ 반볡 μš”μ²­μ˜ 경우
ν—€λ”λŠ” μš”μ²­/μ‘λ‹΅μ˜ 훨씬 더 큰 뢀뢄이 λ©λ‹ˆλ‹€.

이것은 ν΄λΌμ΄μ–ΈνŠΈλ₯Ό 더 μ€‘μš”ν•˜κ²Œ μƒκ°ν•˜λŠ” μ‚¬λžŒλ“€μ—κ²Œλ„ μ€‘μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λΉ„μš©λ³΄λ‹€ μ„±λŠ₯(μ²˜λ¦¬λŸ‰λ³΄λ‹€ λŒ€κΈ° μ‹œκ°„μ΄ 많음).

이 μ‚¬μš© μ‚¬λ‘€μ˜ 경우 κ°€μž₯ μœ μš©ν•œ μ˜΅μ…˜μ€
λ‹¨μˆœνžˆ 값을 μ œκ±°ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 헀더λ₯Ό μ™„μ „νžˆ μ œκ±°ν•˜μ‹­μ‹œμ˜€.
λ˜λŠ” 버전 λΆ€λΆ„.

이 μ˜κ²¬μ€ λŒ€λΆ€λΆ„ κ΄€λ ¨ μ°Έμ‘°/사양/RFC 정보λ₯Ό μΆ”κ°€ν•˜λŠ” κ²ƒμœΌλ‘œ μ œν•œλ˜λ©° (λ°”λΌκ±΄λŒ€) λŒ€λΆ€λΆ„ 의견이 μ—†λŠ” 해석/μ£Όμ„μž…λ‹ˆλ‹€.

RFC7231 ν•˜μ΄νΌν…μŠ€νŠΈ 전솑 ν”„λ‘œν† μ½œ(HTTP/1.1): 의미 및 μ½˜ν…μΈ  https://tools.ietf.org/html/rfc7231#section -7.4.2

...원본 μ„œλ²„λŠ” μ‘λ‹΅μ—μ„œ μ„œλ²„ ν•„λ“œλ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€(MAY).

원본 μ„œλ²„λŠ” λΆˆν•„μš”ν•˜κ²Œ μ„ΈλΆ„ν™”λœ μ„ΈλΆ€ 정보λ₯Ό ν¬ν•¨ν•˜λŠ” μ„œλ²„ ν•„λ“œλ₯Ό μƒμ„±ν•΄μ„œλŠ” μ•ˆ 되며 제3자의 ν•˜μœ„ μ œν’ˆ μΆ”κ°€λ₯Ό μ œν•œν•΄μ•Ό ν•©λ‹ˆλ‹€(SHOULD). μ§€λ‚˜μΉ˜κ²Œ κΈΈκ³  μƒμ„Έν•œ μ„œλ²„ ν•„λ“œ 값은 응닡 λŒ€κΈ° μ‹œκ°„μ„ μ¦κ°€μ‹œν‚€κ³  κ³΅κ²©μžκ°€ μ•Œλ €μ§„ λ³΄μ•ˆ ν—ˆμ μ„ (μ•½κ°„) 더 μ‰½κ²Œ μ°Ύκ³  μ•…μš©ν•  수 μžˆλŠ” λ‚΄λΆ€ κ΅¬ν˜„ μ„ΈλΆ€ 정보λ₯Ό 잠재적으둜 λ“œλŸ¬λƒ…λ‹ˆλ‹€.

https://tools.ietf.org/html/rfc7231#section -9.6

9.6. μ œν’ˆ 정보 곡개
User-Agent(μ„Ήμ…˜ 5.5.3), Via([RFC7230]의 μ„Ήμ…˜ 5.7.1) 및 Server(μ„Ήμ…˜ 7.4.2) 헀더 ν•„λ“œλŠ” μ’…μ’… 각각의 λ°œμ‹ μžμ˜ μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ— λŒ€ν•œ 정보λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 이둠적으둜 이것은 κ³΅κ²©μžκ°€ μ•Œλ €μ§„ λ³΄μ•ˆ ν—ˆμ μ„ 더 μ‰½κ²Œ μ•…μš©ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. μ‹€μ œλ‘œ κ³΅κ²©μžλŠ” μ‚¬μš© 쀑인 λͺ…λ°±ν•œ μ†Œν”„νŠΈμ›¨μ–΄ 버전에 관계없이 λͺ¨λ“  잠재적인 ν—ˆμ μ„ μ‹œλ„ν•˜λŠ” κ²½ν–₯이 μžˆμŠ΅λ‹ˆλ‹€. λ„€νŠΈμ›Œν¬ 방화벽을 톡해 포털 역할을 ν•˜λŠ” ν”„λ‘μ‹œλŠ” λ°©ν™”λ²½ 뒀에 μžˆλŠ” 호슀트λ₯Ό 식별할 수 μžˆλŠ” 헀더 정보 전솑과 κ΄€λ ¨ν•˜μ—¬ νŠΉλ³„ν•œ 예방 쑰치λ₯Ό μ·¨ν•΄μ•Ό ν•©λ‹ˆλ‹€. Via 헀더 ν•„λ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ μ€‘κ°œμžκ°€ λ―Όκ°ν•œ μ‹œμŠ€ν…œ 이름을 κ°€λͺ…μœΌλ‘œ λ°”κΏ€ 수 μžˆμŠ΅λ‹ˆλ‹€.

(더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμŒ) RFC2616μ—μ„œ:

15.1.2 λ―Όκ°ν•œ μ •λ³΄μ˜ 전솑
일반 데이터 전솑 ν”„λ‘œν† μ½œκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ HTTPλŠ” μ „μ†‘λ˜λŠ” λ°μ΄ν„°μ˜ λ‚΄μš©μ„ μ‘°μ ˆν•  수 μ—†μœΌλ©° 주어진 μš”μ²­μ˜ μ»¨ν…μŠ€νŠΈ λ‚΄μ—μ„œ νŠΉμ • μ •λ³΄μ˜ 민감도λ₯Ό κ²°μ •ν•˜λŠ” μ„ ν—˜μ  방법도 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ‘μš© ν”„λ‘œκ·Έλž¨μ€ ν•΄λ‹Ή 정보 μ œκ³΅μžμ—κ²Œ κ°€λŠ₯ν•œ ν•œ 이 정보에 λŒ€ν•œ λ§Žμ€ μ œμ–΄λ₯Ό μ œκ³΅ν•΄μ•Ό ν•©λ‹ˆλ‹€(SHOULD). 4개의 헀더 ν•„λ“œλŠ” 이 μ»¨ν…μŠ€νŠΈμ—μ„œ νŠΉλ³„νžˆ μ–ΈκΈ‰ν•  κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€: Server, Via, Referer 및 From.
μ„œλ²„μ˜ νŠΉμ • μ†Œν”„νŠΈμ›¨μ–΄ 버전을 κ³΅κ°œν•˜λ©΄ μ„œλ²„ μ‹œμŠ€ν…œμ΄ λ³΄μ•ˆ ν—ˆμ μ„ ν¬ν•¨ν•˜λŠ” κ²ƒμœΌλ‘œ μ•Œλ €μ§„ μ†Œν”„νŠΈμ›¨μ–΄μ— λŒ€ν•œ 곡격에 더 μ·¨μ•½ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. κ΅¬ν˜„μžλŠ” μ„œλ²„ 헀더 ν•„λ“œλ₯Ό ꡬ성 κ°€λŠ₯ν•œ μ˜΅μ…˜μœΌλ‘œ λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€(SHOULD).

PEP3333 Python μ›Ή μ„œλ²„ κ²Œμ΄νŠΈμ›¨μ΄ μΈν„°νŽ˜μ΄μŠ€ v1.0.1 https://www.python.org/dev/peps/pep-3333/#the -start-response-callable

일반적으둜 μ„œλ²„ λ˜λŠ” κ²Œμ΄νŠΈμ›¨μ΄λŠ” μ˜¬λ°”λ₯Έ 헀더가 ν΄λΌμ΄μ–ΈνŠΈμ— μ „μ†‘λ˜λ„λ‘ ν•  μ±…μž„μ΄ μžˆμŠ΅λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ HTTP(λ˜λŠ” μœ νš¨ν•œ 기타 κ΄€λ ¨ 사양)에 ν•„μš”ν•œ 헀더λ₯Ό μƒλž΅ν•˜λŠ” 경우 μ„œλ²„ λ˜λŠ” κ²Œμ΄νŠΈμ›¨μ΄λŠ” 헀더λ₯Ό μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ HTTP Date: 및 Server: ν—€λ”λŠ” 일반적으둜 μ„œλ²„ λ˜λŠ” κ²Œμ΄νŠΈμ›¨μ΄μ—μ„œ μ œκ³΅ν•©λ‹ˆλ‹€.

  • μ„œλ²„ 응닡 ν—€λ”λŠ” HTTP 1.1에 따라 선택 μ‚¬ν•­μž…λ‹ˆλ‹€.
  • RFCλŠ” μ§€λ‚˜μΉ˜κ²Œ μƒμ„Έν•œ μ„œλ²„ ν•„λ“œκ°€ μ‚¬μ΄νŠΈμ—μ„œ μ·¨μ•½ν•œ μ„œλ²„λ₯Ό κ²€μƒ‰ν•˜λŠ” 것을 더 μ‰½κ²Œ λ§Œλ“€ 수 μžˆμŒμ„ μΈμ‹ν•©λ‹ˆλ‹€. λΆ„λͺ…νžˆ 이것은 ν•œ 단계 더 μ–΄λ ΅κ²Œ λ§Œλ“œλŠ” λͺ¨ν˜Έν•œ 쑰항이며, μ„ΈλΆ€ 사항이 λ„ˆλ¬΄ λ§Žμ€ 것은 상황에 따라 λ‹€λ¦…λ‹ˆλ‹€.
  • 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” HTTP 1.1 RFC2616은 μ„œλ²„ 헀더λ₯Ό μˆ¨κΈ°λŠ” 값이 쑰금 더 κ΅΅μŠ΅λ‹ˆλ‹€.
  • PEP3333은 ν•„μˆ˜ λ˜λŠ” 일반 ν—€λ”μ˜ μ»¨ν…μŠ€νŠΈμ—μ„œ Server 헀더λ₯Ό μ–ΈκΈ‰ν•  λ•Œ μ•½κ°„ κ³Όλ„ν•˜κ²Œ μ§€λ‚˜μΉ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

Apache HTTPD ServerTokens 와 같은 이에 λŒ€ν•œ λ§Žμ€ 의견: https://httpd.apache.org/docs/2.4/mod/core.html#servertokens

ServerTokensλ₯Ό μ΅œμ†Œκ°’ 미만으둜 μ„€μ •ν•˜λŠ” 것은 μƒν˜Έ μš΄μš©μ„± 문제λ₯Ό λ””λ²„κ·Έν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“€κΈ° λ•Œλ¬Έμ— ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ˜ν•œ Server: 헀더λ₯Ό λΉ„ν™œμ„±ν™”ν•΄λ„ μ„œλ²„ λ³΄μ•ˆμ΄ κ°•ν™”λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. "μ•”ν˜Έλ₯Ό ν†΅ν•œ μ•ˆλ³΄"λΌλŠ” 생각은 신화이며 잘λͺ»λœ μ•ˆμ „ μ˜μ‹μœΌλ‘œ μ΄μ–΄μ§‘λ‹ˆλ‹€.

μ„œλ²„ 헀더λ₯Ό gunicorn 둜 λ³€κ²½ν•˜λŠ” 것은 μ‹€μš©μ μΈ μ†”λ£¨μ…˜μ΄λ©° ꡬ성 없이 κ·Έλ ‡κ²Œ ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λͺ¨λ“  μ „μ†‘μ˜ 크기λ₯Ό μ΅œμ ν™”ν•˜λ €λŠ” @kmichel-sereema와 같은 μ‚¬λžŒλ“€μ€ μ—¬κΈ°κ°€ 그런 λ―Έμ„Έ μ΅œμ ν™”λ₯Ό μˆ˜ν–‰ν•˜λŠ” 곳이 μ•„λ‹ˆλΌκ³  μƒκ°ν•©λ‹ˆλ‹€. HTTP 헀더가 λ„ˆλ¬΄ λ§Žμ€ μ˜€λ²„ν—€λ“œλΌλ©΄ HTTP 1.xλŠ” μ‚¬μš©ν•˜κΈ°μ— 이상적인 ν”„λ‘œν† μ½œμ΄ μ•„λ‹ˆλ©° μ„œλ²„ 헀더λ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ λΉ„ν™œμ„±ν™”ν•  수 μžˆλ„λ‘ μΆ”κ°€ ꡬ성을 μΆ”κ°€ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@tilgovi 의 μ œμ•ˆμ€ λ‚˜μ—κ²Œ 쒋은 μ ˆμΆ©μ•ˆμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

λ§Žμ€ ν™˜κ²½μ—μ„œ 이것은 심지어 λ¬΄μ˜λ―Έν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. gunicorn 배포 λ¬Έμ„œ μ—μ„œλŠ” gunicorn μ•žμ— nginx와 같은 ν”„λ‘μ‹œ μ„œλ²„λ₯Ό μ„œλ²„ 응닡 헀더 λ₯Ό

@tilgovi & @jamadden의 제 μ œμ•ˆκ³Ό μ˜κ²¬μ— 따라 #2233에 λŒ€ν•œ 이 호의λ₯Ό μ’…λ£Œν•©λ‹ˆλ‹€. μ½”λ“œμ™€ μ˜κ²¬μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰