Skip to content

Latest commit

Β 

History

History
178 lines (106 loc) Β· 9.21 KB

File metadata and controls

178 lines (106 loc) Β· 9.21 KB

10μž₯ πŸ™ HTTP/2.0

10.1 γ€€ HTTP/2.0의 λ“±μž₯ λ°°κ²½γ€€ hylee

  1. λ‹€μŒ λ¬Έμž₯μ—μ„œ λΉˆμΉΈμ— λ“€μ–΄κ°ˆ λ‹¨μ–΄λ‘œ μ•Œλ§žμ€ 것은?

    HTTP 2.0은 주둜 HTTP/1.1의 _________ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‚˜μ™”λ‹€.

    a. κ΅¬ν˜„μ˜ λ‹¨μˆœμ„±

    b. μ„±λŠ₯

    c. μ ‘κ·Όμ„±

  2. HTTP/1.x μ—μ„œ HTTP/2κ°€ λ˜λ©΄μ„œ 바뀐 것을 λͺ¨λ‘ κ³ λ₯΄μ‹œμ˜€

    a. HTTP 의미 체계(예: 동사, λ©”μ„œλ“œ 및 헀더)

    b. 의미 체계가 μΈμ½”λ”©λ˜λŠ” 방식

πŸ“„ λ‹΅μ§€
  1. λ‹€μŒ λ¬Έμž₯μ—μ„œ λΉˆμΉΈμ— λ“€μ–΄κ°ˆ λ‹¨μ–΄λ‘œ μ•Œλ§žμ€ 것은?

    HTTP 2.0은 주둜 HTTP/1.1의 b.μ„±λŠ₯ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‚˜μ™”λ‹€.

  2. HTTP/1.x μ—μ„œ HTTP/2κ°€ λ˜λ©΄μ„œ 바뀐 것을 λͺ¨λ‘ κ³ λ₯΄μ‹œμ˜€.

    a. HTTP 의미 체계(예: 동사, λ©”μ„œλ“œ 및 헀더)

    b. 의미 체계가 μΈμ½”λ”©λ˜λŠ” 방식

    μ •λ‹΅ : b

    HTTP/2의 λͺ¨λ“  μ„±λŠ₯ ν–₯상 쀑 핡심은 μƒˆ λ°”μ΄λ„ˆλ¦¬ ν”„λ ˆμ΄λ° 계측인데 이 계측은 HTTP λ©”μ‹œμ§€κ°€ μΊ‘μŠν™”λ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 사이에 μ „μ†‘λ˜λŠ” 방식을 κ·œμ •ν•©λ‹ˆλ‹€. 이런 λ³€ν™”λ₯Ό 톡해 HTTP 의미 체계(예: 동사, λ©”μ„œλ“œ 및 헀더)λŠ” 영ν–₯을 λ°›μ§€ μ•Šμ§€λ§Œ 전솑 쀑에 이 의미 체계가 μΈμ½”λ”©λ˜λŠ” 방식은 λ‹¬λΌμ‘ŒμŠ΅λ‹ˆλ‹€. μ€„λ°”κΏˆμœΌλ‘œ κ΅¬λΆ„λ˜λŠ” 일반 ν…μŠ€νŠΈ HTTP/1.x ν”„λ‘œν† μ½œκ³Ό 달리, λͺ¨λ“  HTTP/2 톡신은 더 μž‘μ€ λ©”μ‹œμ§€μ™€ ν”„λ ˆμž„μœΌλ‘œ λΆ„ν• λ˜λ©°, 각각은 λ°”μ΄λ„ˆλ¦¬ ν˜•μ‹μœΌλ‘œ μΈμ½”λ”©λ©λ‹ˆλ‹€.
    <좜처>
    (https://developers.google.com/web/fundamentals/performance/http2?hl=ko#%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%AC_%ED%94%84%EB%A0%88%EC%9D%B4%EB%B0%8D_%EA%B3%84%EC%B8%B5)


10.2 ~ 10.3 γ€€ κ°œμš” ~ HTTP/1.1과의 차이점  hylee

  1. HTTP/2.0μ—μ„œ λͺ¨λ“  λ©”μ‹œμ§€λŠ” _______ 에 담겨 μ „μ†‘λœλ‹€.

  2. 슀트림과 λ©€ν‹° ν”Œλ ‰μ‹±μ— λŒ€ν•΄ μ˜³μ€ 것을 λͺ¨λ‘ κ³ λ₯΄μ‹œμ˜€.

    a. ν•˜λ‚˜μ˜ 컀λ„₯μ…˜μ—μ„œ μ—¬λŸ¬ 개의 μŠ€νŠΈλ¦Όμ„ λ™μ‹œμ— μ—΄ 수 있고 이λ₯Ό 톡해 응닡 μˆœμ„œμ— 상관없이 데이터λ₯Ό μ£Όκ³  받을 수 μžˆλ‹€.

    b. μŠ€νŠΈλ¦Όμ€ μš°μ„ μˆœμœ„λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

    c. μŠ€νŠΈλ¦Όμ„ λ§Œλ“€ λ•Œ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈλŠ” λΉ λ₯΄κ²Œ TCPνŒ¨ν‚·μ„ μ£Όκ³  λ°›μŒμœΌλ‘œμ¨ μŠ€νŠΈλ¦Όμ„ λ§Œλ“€ 수 μžˆλ‹€.

  3. λΉˆμΉΈμ— λ“€μ–΄κ°ˆ λ‚΄μš©μ€?

    HTTP/2μ—μ„œλŠ” _______ μ••μΆ• ν˜•μ‹μ„ μ‚¬μš©ν•˜μ—¬ μš”μ²­ 및 응닡 헀더 메타 데이터λ₯Ό μ••μΆ•ν•©λ‹ˆλ‹€.

  4. Stream 3의 HEADERS frame에 λ“€μ–΄κ°ˆ λ‚΄μš© μ μœΌμ„Έμš”.

    헀더_문제

  5. μ„œλ²„ν‘Έμ‹œλ₯Ό 톡해 μ„œλ²„λŠ” μ›λž˜ μš”μ²­μ— 응닡할 뿐만 μ•„λ‹ˆλΌ ν΄λΌμ΄μ–ΈνŠΈκ°€ λͺ…μ‹œμ μœΌλ‘œ μš”μ²­ν•˜μ§€ μ•Šμ•„λ„ μ„œλ²„κ°€ 좔가적인 λ¦¬μ†ŒμŠ€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ— 보낼 수 μžˆλ‹€. ( O / X )

  6. λͺ¨λ“  μ„œλ²„ ν‘Έμ‹œ μŠ€νŠΈλ¦Όμ€ ____________ ν”„λ ˆμž„μ„ 톡해 μ‹œμž‘λ˜λ©° 이 ν”„λ ˆμž„μ€ ν‘Έμ‹œλœ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜λŠ” 응닡 데이터보닀 λ¨Όμ € μ „λ‹¬λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

  7. 6 λ²ˆμ—μ„œ ν•΄λ‹Ή ν”„λ ˆμž„μ΄ λ¨Όμ € μ „λ‹¬λ˜μ–΄μ•Ό λ˜λŠ” μ΄μœ λŠ”?

πŸ“„ λ‹΅μ§€
  1. HTTP/2.0μ—μ„œ λͺ¨λ“  λ©”μ‹œμ§€λŠ” ν”„λ ˆμž„ 에 담겨 μ „μ†‘λœλ‹€.

  2. 슀트림과 λ©€ν‹° ν”Œλ ‰μ‹±μ— λŒ€ν•΄ μ˜³μ€ 것을 λͺ¨λ‘ κ³ λ₯΄μ‹œμ˜€.

    a. ν•˜λ‚˜μ˜ 컀λ„₯μ…˜μ—μ„œ μ—¬λŸ¬ 개의 μŠ€νŠΈλ¦Όμ„ λ™μ‹œμ— μ—΄ 수 있고 이λ₯Ό 톡해 응닡 μˆœμ„œμ— 상관없이 데이터λ₯Ό μ£Όκ³  받을 수 μžˆλ‹€.

    b. μŠ€νŠΈλ¦Όμ€ μš°μ„ μˆœμœ„λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

    c. μŠ€νŠΈλ¦Όμ„ λ§Œλ“€ λ•Œ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈλŠ” λΉ λ₯΄κ²Œ TCPνŒ¨ν‚·μ„ μ£Όκ³  λ°›μŒμœΌλ‘œμ¨ μŠ€νŠΈλ¦Όμ„ λ§Œλ“€ 수 μžˆλ‹€.

    μ •λ‹΅ : a, b
    c μ—μ„œ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈλŠ” μŠ€νŠΈλ¦Όμ„ μƒλŒ€λ°©κ³Ό ν˜‘μƒ 없이 일방적으둜 λ§Œλ“ λ‹€. μ΄λŠ” μŠ€νŠΈλ¦Όμ„ λ§Œλ“€ λ•Œ ν˜‘μƒμ„ μœ„ν•œ TCPνŒ¨ν‚·μ„ μ£Όκ³ λ°›λŠ” μ‹œκ°„μ„ λ‚­λΉ„ν•˜μ§€ μ•Šμ•„λ„ 됨을 μ˜λ―Έν•œλ‹€. (p. 291)

  3. λΉˆμΉΈμ— λ“€μ–΄κ°ˆ λ‚΄μš©μ€?

    μ •λ‹΅ : HTTP/2μ—μ„œλŠ” HPACK μ••μΆ• ν˜•μ‹μ„ μ‚¬μš©ν•˜μ—¬ μš”μ²­ 및 응닡 헀더 메타 데이터λ₯Ό μ••μΆ•ν•©λ‹ˆλ‹€.

  4. Stream 3의 HEADERS frame에 λ“€μ–΄κ°ˆ λ‚΄μš© μ μœΌμ„Έμš”.

    헀더_μ •λ‹΅

  5. μ„œλ²„ν‘Έμ‹œλ₯Ό 톡해 μ„œλ²„λŠ” μ›λž˜ μš”μ²­μ— 응닡할 뿐만 μ•„λ‹ˆλΌ ν΄λΌμ΄μ–ΈνŠΈκ°€ λͺ…μ‹œμ μœΌλ‘œ μš”μ²­ν•˜μ§€ μ•Šμ•„λ„ μ„œλ²„κ°€ 좔가적인 λ¦¬μ†ŒμŠ€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ— 보낼 수 μžˆλ‹€. ( O / X )

    μ •λ‹΅ : O
    μ΄λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ HTML λ¬Έμ„œλ₯Ό νŒŒμ‹±ν•΄μ„œ ν•„μš”ν•œ λ¦¬μ†ŒμŠ€λ₯Ό λ‹€μ‹œ μš”μ²­ν•˜μ—¬ λ°œμƒν•˜κ²Œ λ˜λŠ” νŠΈλž˜ν”½κ³Ό νšŒμ „ 지연을 쀄여쀀닀.

  6. λͺ¨λ“  μ„œλ²„ ν‘Έμ‹œ μŠ€νŠΈλ¦Όμ€ PUSH_PROMISE ν”„λ ˆμž„μ„ 톡해 μ‹œμž‘λ˜λ©° 이 ν”„λ ˆμž„μ€ ν‘Έμ‹œλœ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜λŠ” 응닡 데이터보닀 λ¨Όμ € μ „λ‹¬λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

  7. 6 λ²ˆμ—μ„œ ν•΄λ‹Ή ν”„λ ˆμž„μ΄ λ¨Όμ € μ „λ‹¬λ˜μ–΄μ•Ό λ˜λŠ” μ΄μœ λŠ”?

    μ •λ‹΅ : μ„œλ²„κ°€ ν‘Έμ‹œν•˜λ €κ³  ν•˜λŠ” μžμ›μ„ ν΄λΌμ΄μ–ΈνŠΈκ°€ λ³„λ„λ‘œ 또 μš”μ²­ν•˜κ²Œ λ˜λŠ” 상황을 ν”Όν•˜κΈ° μœ„ν•¨μ΄λ‹€. (= λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄ 쀑볡 μš”μ²­μ΄ μƒμ„±λ˜λŠ” 것을 막기 μœ„ν•΄μ„œ)


10.4 γ€€ μ•Œλ €μ§„ λ³΄μ•ˆ μ΄μŠˆγ€€ kukim

  1. HTTP/2.0 λ©”μ„Έμ§€λ₯Ό μ€‘κ°„μ˜ ν”„λ½μ‹œκ°€ HTTP/1.1 λ©”μ„Έμ§€λ‘œ λ³€ν™˜ν•  λ•Œ λ©”μ„Έμ§€κ°€ λ³€μ§ˆ 될 수 μžˆλ‹€ (O/X)
  2. Ι‘+πŸ”₯) μΊ‘μŠν™” κ³΅κ²©μ΄λž€ 무엇인가?
  3. HTTP/2.0은 HTTP/1.1κ³Ό 달리 슀트림과 λ©€ν‹°ν”Œλ ‰μ‹±μ„ 톡해 효율적으둜 톡신할 수 μžˆλ‹€. μ΄λ•Œ λ°œμƒν•  수 μžˆλŠ” λ³΄μ•ˆ μ΄μŠˆλŠ” 무엇인가?
πŸ“„ λ‹΅μ§€
  1. HTTP/2.0 λ©”μ„Έμ§€λ₯Ό μ€‘κ°„μ˜ ν”„λ½μ‹œκ°€ HTTP/1.1 λ©”μ„Έμ§€λ‘œ λ³€ν™˜ν•  λ•Œ λ©”μ„Έμ§€κ°€ λ³€μ§ˆ 될 수 μžˆλ‹€ (O/X)
  • μ •λ‹΅ : O (CR,LF,Null 문자 등을 잘λͺ» μ²˜λ¦¬ν•˜μ—¬ 헀더와 λ©”μ„Έμ§€λ₯Ό κ΅¬λΆ„ν•˜μ§€ λͺ»ν•˜κ²Œ 될 수 μžˆλ‹€. 이런 취약점을 κ°€μ§€κ³  κ³΅κ²©ν•˜λŠ” 것을 "μ€‘κ°œμž μΊ‘μŠν™” 곡격(Intermediary Encapulation Attacks)"이라고 ν•œλ‹€.
  • ν˜„μž¬κΉŒμ§€λ„ λ°œμƒν•˜λŠ” λ³΄μ•ˆ μ΄μŠˆμ΄λ‹€. (2019λ…„ 11월에 NVD-CVEμ—μ„œ λ°œν‘œ https://nvd.nist.gov/vuln/detail/CVE-2019-19330)
  1. Ι‘+πŸ”₯) μΊ‘μŠν™” κ³΅κ²©μ΄λž€ 무엇인가?
  • μ •λ‹΅ : μΊ‘μŠν™”λœ 데이터λ₯Ό λ‹€λ₯Έ κ³³μ—μ„œ λ””μ½”λ”©ν•  λ•Œ 데이터λ₯Ό 잘λͺ» λΆ„λ¦¬ν•˜κ±°λ‚˜ κ΅¬λ³„ν•˜μ—¬ 잘λͺ»λœ μ½”λ“œκ°€ μ†Œν”„νŠΈμ›¨μ–΄μ— 듀어와 문제λ₯Ό μΌμœΌν‚€λŠ” κ²½μš°μ΄λ‹€. μ΄λŠ” 전체 μ‹œμŠ€ν…œμ— μŒ“μ—¬ ν”„λ‘œκ·Έλž¨ λˆ„μˆ˜λ₯Ό μ‹œν‚€κ±°λ‚˜ 도메인 κ°„ 곡격이 생길 수 있고 μ—‘μ„ΈμŠ€ κΆŒν•œμ„ 얻을 수 μžˆλ‹€.
예λ₯Ό λ“€μ–΄λ³΄μž.
1. 해컀가 HTTP/1.1을 μ‚¬μš©ν•˜λŠ” μ„œλ²„μ™€ 쀑간에 λ©μ²­ν•œ ν”„λ½μ‹œλ₯Ό μ°ΎλŠ”λ‹€.
2. HTTP/2.0 λ©”μ„Έμ§€λ₯Ό 보내 1.1둜 ν•΄μ„ν•˜κ²Œ λ§Œλ“ λ‹€.
3. μ΄λ•Œ 2.0으둜 λ³΄λ‚΄λŠ” 메세지에 CR,LF, Null λ¬Έμžλ“±μ„ λ„£μ–΄ μ–΄λ–»κ²Œ HTTP/1.1 μ½”λ“œκ°€ ν•΄μ„λ˜λŠ”μ§€ ν™•μΈν•˜κ³  컴파일 λ³΄μ•ˆ 문제λ₯Ό μ°ΎλŠ”λ‹€.
4. λ¬Έμ œμ μ„ λ°œκ²¬ν•˜κ³  μ•„λž˜μ™€ 같은 μ½”λ“œλ₯Ό HTTP/2.0 λ©”μ„Έμ§€λ₯Ό 보내 μ„œλ²„κ°€ 이λ₯Ό μ‹€ν–‰ν•˜κ²Œ λ§Œλ“€κ³  κ·Έ 응닡을 λ°›κ³  κ³΅κ²©ν•œλ‹€.

char* path = getenv("PATH");
...
sprintf(stderr, "cannot find exe on path %s\n", path);

getenv() ν•¨μˆ˜λŠ” ν‘œμ€€μ˜€λ₯˜ μŠ€νŠΈλ¦Όμ„ μ΄μš©ν•΄μ„œ ν™˜κ²½λ³€μˆ˜λ₯Ό ν™•μΈν•˜λŠ” μ½”λ“œμ΄λ‹€. 
이λ₯Ό HTTP/2.0 λ©”μ„Έμ§€λ‘œ μΊ‘μŠν™”ν•˜μ—¬ 보내고 μˆœμ§„ν•œ ν”„λ½μ‹œλŠ” 이λ₯Ό μ‰½κ²Œ ν•΄μ„ν•˜μ—¬
HTTP/1.1 λ©”μ„Έμ§€λ‘œ λ³€ν™˜ν•˜λŠ”λ° μ„œλ²„λŠ” 이λ₯Ό λͺ¨λ₯΄κ³  κ·ΈλŒ€λ‘œ μ•„λž˜μ˜ μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•˜μ—¬
κ³΅κ²©μžμ—κ²Œ κ·ΈλŒ€λ‘œ λ…ΈμΆœμ‹œν‚¬ 수 μžˆλ‹€.

reference : https://www.veracode.com/security/encapsulation
  1. HTTP/2.0은 HTTP/1.1κ³Ό 달리 슀트림과 λ©€ν‹°ν”Œλ ‰μ‹±μ„ 톡해 효율적으둜 톡신할 수 μžˆλ‹€. μ΄λ•Œ λ°œμƒν•  수 μžˆλŠ” λ³΄μ•ˆ μ΄μŠˆλŠ” 무엇인가?
  • μ •λ‹΅ : κΈ΄ 컀λ„₯μ…˜μ„ μœ μ§€ν•˜κ³  있으면 κ°œμΈμ •λ³΄ μœ μΆœμ— μ•…μš©λ  수 μžˆλ‹€.

HTTP/2.0 그림으둜 μ‚΄νŽ΄λ³΄κΈ°

  • Binary Framing Layer
  • μš”μ²­ 및 응닡 닀쀑화
  • 헀더 μ••μΆ•