Daily/Today I Learned

22.07.15_TIL

ํ˜ธ๋ฐ€์ด 2022. 7. 15. 11:29

๐Ÿ“Œ ์š”์ฆ˜ ๋‚ ์”จ๊ฐ€ ๋”์›Œ์กŒ๋‹ค ์ถ”์›Œ์กŒ๋‹ค ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๋‹ˆ ํ™˜์ ˆ๊ธฐ์ธ๋“ฏํ•˜๋‹ค ์ด๋Ÿด๋•Œ ๋ชธ๊ด€๋ฆฌ์— ์œ ์˜ํ•ด์•ผ๊ฒ ๋‹ค... ํ•˜๋‚˜๋” ์š”์ฆ˜ ๋ชธ์ด ๋„ˆ๋ฌด ์‰ฝ๊ฒŒ ํ”ผ๋กœํ•ด์ง„๋‹ค.. ํ™•์‹คํžˆ ์ฒด๋ ฅ์ด ๋–จ์–ด์ง€๋Š” ๊ฒƒ์„ ๋ชธ์œผ๋กœ ์ง์ ‘ ์ฒด๊ฐํ•˜๊ณ  ์žˆ๋‹ค. ์ฒด๋ ฅ์„๋Š˜๋ฆฌ์ž!! ์ดˆ์‹ฌ์„ ์ฐพ์•„ ๋” ์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ•ด๋ณด์ž!!

๐Ÿ“— ์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ

OWASP(The Open Web Application Security Project)

  • ์ „ ์„ธ๊ณ„์˜ ๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋“ค์ด ์›น์˜ ๋ณด์•ˆ์— ๋Œ€ํ•œ ํ‘œ์ค€์„ ์ •์˜ํ•˜๊ณ  ์ด์— ๋Œ€ํ•ด ๊ธฐ์—…๊ณผ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ํšจ์œจ์ ์ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์ด๋‹ค.

SQL Injection

  • ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๊ฐ•๋ ฅํ•œ ๊ณต๊ฒฉ๊ธฐ๋ฒ•
  • DB์—์„œ ์ž„์˜์˜ SQL๋ฌธ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ช…๋ น์–ด๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ณต๊ฒฉ์œ ํ˜•
  • ๋Œ€์‘ ๋ฐฉ์•ˆ
    • ์ž…๋ ฅ(์š”์ฒญ)๊ฐ’ ๊ฒ€์ฆ
    • Prepared Statement ๊ตฌ๋ฌธ ์‚ฌ์šฉ
    • Error Message ๋…ธ์ถœ ๊ธˆ์ง€
  • SQL(Structured Query Language)
    • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ ๋ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

XSS(Cross-site Scripting)

  • ์›น ์‚ฌ์ดํŠธ ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹Œ ๊ตฅ๊ฒฉ์ž๊ฐ€ ์›น ์‚ฌ์ดํŠธ์— ์•…์˜์ ์ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹ฌ์–ด๋‘๋Š” ํ–‰์œ„
  • ๊ณต๊ฒฉ์œ ํ˜•
    • Stored XSS(์ง€์†์„ฑ)
      • ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋˜์–ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ”ผํ•ด๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋Š” ์œ ํ˜•
    • Refleted XSS(๋น„ ์ง€์†์„ฑ)
      • URL ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ด์šฉํ•ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ์œ ํ˜•
  • ๋Œ€์‘๋ฐฉ์•ˆ
    • ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ์˜ ์ž…๋ ฅ์„ ๋ง‰๋Š”๋‹ค.
    • ์ฟ ํ‚ค ์„ค์ • ํ™•์ธํ•œ๋‹ค(httpOnly)
    • ์ฟ ํ‚ค์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๋‹ด์ง€ ์•Š๋Š”๋‹ค.

ํ† ํฐ

  • ํด๋ผ์ด์–ธํŠธ์— ์ธ์ฆ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•œ๋‹ค.
  • ์œ„ํ—˜ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ํ† ํฐ์€ ์œ ์ €์ •๋ณด๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ(JWT, Token-based Authentication)

  • ๋งค ์š”์ฒญ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ•˜๊ณ  ์ด์— ๋”ฐ๋ฅธ ๋ถ€๋‹ด์„ ๋œ์–ด๋‚ด๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

JWT ์ข…๋ฅ˜

  • ์•ก์„ธ์Šคํ† ํฐ
    • ๋ณดํ˜ธ๋œ ์ •๋ณด๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•œ๋‹ค.
    • ์งง์€ ์œ ํšจ๊ธฐ๊ฐ„์„ ์ฃผ์–ด ํ† ํฐ์„ ํƒˆ์ทจ๋‹นํ•˜๋”๋ผ๋„ ์žฅ๊ธฐ๊ฐ„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ
    • ์•ก์„ธ์Šค ํ† ํฐ์˜ ์œ ํšจ๊ธฐ๊ฐ„์ด ๋งŒ๋ฃŒ๋œ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ถ€์—ฌ๋ฐ›๊ฒŒ ํ•ด์ค€๋‹ค.
    • ์œ ์ €์˜ ํŽธ์˜๋ณด๋‹ค ์ •๋ณด๋ฅผ ์ค‘์š”์‹œ ํ•˜๋Š” ๊ณณ์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

JWT ๊ตฌ์กฐ

  • Header
    • ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ† ํฐ์ธ์ง€ ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ Signature๋ฅผ ์•”ํ˜ธํ™” ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ
  • Payload
    • ์„œ๋ฒ„์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ €์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋‚ด์šฉ
  • Signature
    • ์„œ๋ฒ„์˜ ๋น„๋ฐ€ํ‚ค์™€ ํ—ค๋”์—์„œ ์ง€์ •ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™” ํ•œ๋‹ค.

OAuth

  • ์ธ์ฆ์„ ์œ„ํ•œ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ
  • ์†Œ์…œ ๋กœ๊ทธ์ธ ์ธ์ฆ ๋ฐฉ์‹์˜ ๋ฐ”ํƒ•์ด ๋˜๋Š” ๊ธฐ์ˆ  
  • ๋ณด์•ˆ๋œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ถŒํ•œ์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ
  • ์ด๋ฏธ ์‚ฌ์šฉ์žฅ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์›น ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ์„ ๋Œ€์‹ ํ•ด์ฃผ๊ณ , ์ ‘๊ทผ ๊ถŒํ•œ์— ๋Œ€ํ•œ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•œ ํ›„, ์ด๋ฅผ ์ด์šฉํ•ด ๋‚ด ์„œ๋ฒ„์—์„œ ์ธ์ฆ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.
  • OAuth๋Š” ์ธ์ฆ์„ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ๋งก๊ธฐ๋Š” ๊ธฐ๋Šฅ์ด๊ณ , ์ ‘๊ทผ ๊ถŒํ•œ ๊ด€๋ฆฌ๋Š” ๋‚ด ์„œ๋ฒ„์˜ ๋ชซ์ด๋‹ค.

OAuth๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ๋‹ค์–‘ํ•œ ์›น ์„œ๋น„์Šค์˜ ID์™€ Password๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ๊ท€์ฐฎ์€ ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค๋“ค (github, google, kakao, facebook ๋“ฑ)์˜ ID์™€ Password๋งŒ ๊ธฐ์–ตํ•ด๋‘๋ฉด ํ•ด๋‹น ์„œ๋น„์Šค์„ ํ†ตํ•ด ์™ธ๋ถ€ ์„œ๋น„์Šค๋กœ ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.
  • ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ App์—์„œ OAuth๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธํ•œ๋‹ค๋ฉด ์ง์ ‘ ์œ ์ €์˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ App์— ๋…ธ์ถœ๋  ์ผ์ด ์—†๊ณ  ์ธ์ฆ ๊ถŒํ•œ์— ๋Œ€ํ•œ ํ—ˆ๊ฐ€๋ฅผ ๋ฏธ๋ฆฌ ์œ ์ €์—๊ฒŒ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ ์ธ ์ธก๋ฉด์—์„œ๋„ ์ข‹๋‹ค.

OAuth์—์„œ ๋ฐ˜๋“œ์‹œ ์•Œ์•„์•ผ ํ•  ์šฉ์–ด

  • Resource Owner
    • ์•ก์„ธ์Šค ์ค‘์ธ ๋ฆฌ์†Œ์Šค์˜ ์œ ์ €
  • Client
    • ๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • Resource Server
    • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜๊ณ  ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„
  • Authorization Server
    • Resource Server๊ฐ€ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๋Š” ์ธ์ฆ์„œ๋ฒ„
    • ๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ธ์ฆํ•œ ํ›„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ์„œ๋ฒ„
  • Authorization Grant
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•ก์„ธ์Šค ํ† ํฐ์„ ์–ป๋Š” ๋ฐฉ๋ฒ•
      • Authorization Code Grant Type
      • Refresh Token Grant Type
      • Client Credentials Grant Type
      • Implicit Grant Type
      • Resource Owner Credentials Grant Type
  • Authorization Code
    • Authorization Grant์˜ ํ•œ ํƒ€์ž…์œผ๋กœ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๊ธฐ ์œ„ํ•œ Code
    • Client ID๋กœ ์ด Code๋ฅผ ๋ฐ›์•„์˜จ ํ›„, Client Secret๊ณผ Code๋ฅผ ์ด์šฉํ•ด ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • Access Token
    • ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ธ์ฆ ํ† ํฐ
    • Authorization Code์™€ Client Secret์„ ์ด์šฉํ•ด ๋ฐ›์•„์˜จ ์ด Access Token์œผ๋กœ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ์Œ
  • Scope
    • ํ† ํฐ์˜ ๊ถŒํ•œ์„ ์ •์˜
    • ์ฃผ์–ด์ง„ ์•ก์„ธ์Šค ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ๊ฒŸ์Šค ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค์˜ ๋ฒ”์œ„

๐Ÿ“˜ ์ถ”๊ฐ€๋กœ ๊ณต๋ถ€ํ•  ๋‚ด์šฉ

[udemy] React ์™„๋ฒฝ ๊ฐ€์ด๋“œ ๊ฐ•์˜ ๋ณด๊ธฐ (๋งค์ผ ์กฐ๊ธˆ์”ฉ ์ด๋ผ๋„ ๊พธ์ค€ํžˆ ๋“ฃ๊ธฐ)

axios ์‚ฌ์šฉ๋ฐฉ๋ฒ•

Python ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด

๐Ÿ“ ์ค‘์š”ํ•œ ๋‚ด์šฉ

  • ํ† ํฐ

'Daily > Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

22.07.19_TIL  (0) 2022.07.19
22.07.18_TIL  (0) 2022.07.18
22.07.14_TIL  (0) 2022.07.14
22.07.12_TIL  (0) 2022.07.12
22.07.11_TIL  (2) 2022.07.11