ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ์ฟ ํ‚ค์™€ ์„ธ์…˜, ๊ทธ๋ฆฌ๊ณ  ์ฟ ํ‚ค์˜ ์˜ต์…˜๋“ค์— ๋Œ€ํ•˜์—ฌ
    ์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ 2023. 3. 19. 22:51

    1. ์ฟ ํ‚ค๋ž€?

    ์ฟ ํ‚ค๋Š” ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋˜๋Š” ์ž‘์€ ๋ฌธ์ž์—ด๋กœ ์ตœ๋Œ€ 4KB๊นŒ์ง€ ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค. HTTP๋Š” ๋ฌด์ƒํƒœ์„ฑ(stateless)์ด๋ž€ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ๋”ฐ๋ผ์„œ ์„œ๋ฒ„๋Š” ๋‘ ์š”์ฒญ์ด ๊ฐ™์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์˜ค๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์ดˆ๊ธฐ ์›น ์ƒํƒœ๊ณ„์—์„œ๋Š” ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•œ ์š”์ฒญ์— ๋Œ€ํ•œ response๋กœ ์–ด๋–ค ํ† ํฐ์„ ๋Œ๋ ค์ฃผ๊ณ  ๋‹ค์Œ ์š”์ฒญ์‹œ์— ํ•ด๋‹น ํ† ํฐ์„ ๊ฐ™์ด ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋Ÿฐ ๋ฌด์ƒํƒœ์„ฑ์„ ํ•ด๊ฒฐํ•ด ์™”๋˜ ๊ฒƒ์ด๋‹ค.

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

    • ๊ฐ™์€ ๋„๋ฉ”์ธ์—์„œ ๋งŒ๋“ค์–ด์ง„ ์ฟ ํ‚ค๋งŒ ๋งค ์š”์ฒญ์‹œ ํ•ด๋‹น ์›น ์„œ๋ฒ„์— ๋ณด๋‚ด์ง„๋‹ค.
    • ์ฟ ํ‚ค์˜ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

    2. ์ฟ ํ‚ค๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์ง€๋Š”๊ฐ€?

    ์›น ์„œ๋ฒ„๊ฐ€ HTTP ์š”์ฒญ์˜ ํ—ค๋”์— Set-cookie๋ฅผ ๋ณด๋‚ด๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €์— ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ธ ์ฟ ํ‚ค๊ฐ€ ์ €์žฅ์ด ๋œ๋‹ค. ํฌ๋กฌ์˜ ๋„คํŠธ์›Œํฌ ํƒญ์„ ํ†ตํ•ด ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด Response Header์— set-cookie๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ์ด ์ฟ ํ‚ค๋Š” Application ํƒญ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์ด Request์‹œ์— header์— cookie์— ๋‹ด๊ฒจ ์„œ๋ฒ„์— ๋ณด๋‚ด์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

    3. ์ฟ ํ‚ค๋ฅผ ํ™•์ธํ•ด๋ณด์ž

    ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํฌ๋กฌ์˜ ๊ฒฝ์šฐ Application ํƒญ์—์„œ ์ฟ ํ‚ค๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋ณด๋ฉด ์ฟ ํ‚ค์— Name๊ณผ Value ์™ธ์—๋„ Domain, Path, Expires, HttpOnly, Secure, SameSite, Priority ๋“ฑ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹ค์–‘ํ•œ ์†์„ฑ๋“ค์ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด ์†์„ฑ๋“ค์— ๋Œ€ํ•ด ์‚ดํŽด๋ด„์œผ๋กœ์จ ์ฟ ํ‚ค์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž.

    3-1. Domain ์˜ต์…˜

    ๋„๋ฉ”์ธ์€ ์ฟ ํ‚ค๊ฐ€ ๋ณด๋‚ด์ ธ์•ผ ํ•  ๋„๋ฉ”์ธ์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ์ด๋‹ค. ๋””ํดํŠธ๋กœ ๋„๋ฉ”์ธ์€ ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ธ ๋„๋ฉ”์ธ์œผ๋กœ ์ง€์ •๋˜์–ด, ํ•ด๋‹น ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์œผ๋กœ HTTP ๋ฆฌํ€˜์ŠคํŠธ๊ฐ€ ์ผ์–ด๋‚  ๋•Œ ๋ณด๋‚ด์ง„๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, google.com์•ˆ์—๋Š” ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” maps.cgoogle.com, calendar.google.com๋“ฑ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋“ค์ด ์กด์žฌํ•œ๋‹ค.

    ์ด ๋•Œ ๋„๋ฉ”์ธ ์˜ต์…˜์„ google.com์ด๋ผ๊ณ  ์ง€์ •ํ•ด ๋‘๋ฉด *name*.google.com ์— ์ ‘์†ํ•  ๋•Œ ์ฟ ํ‚ค๊ฐ€ ํ•จ๊ป˜ ๋ณด๋‚ด์ง„๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ์ด ๋ณด๋‚ด์งˆ ๋•Œ ํ˜ธ์ŠคํŠธ ๋„ค์ž„์„ ๋น„๊ตํ•˜์—ฌ ๊ฐ™์€ ๋„๋ฉ”์ธ์— ์žˆ๋Š” ์ฟ ํ‚ค๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ธ๋‹ค.

    ๋„๋ฉ”์ธ์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ, ์„œ๋ธŒ๋„๋ฉ”์ธ์—์„œ๋Š” ์ฟ ํ‚ค๊ฐ€ ๋ณด๋‚ด์ง€์ง€ ์•Š์œผ๋‚˜, ์œ„์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๋„๋ฉ”์ธ ์˜ต์…˜์„ ์ง€์ •ํ•ด๋‘๋ฉด ์„œ๋ธŒ๋„๋ฉ”์ธ์—์„œ๋„ ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋œ๋‹ค.

    3-2. Path ์˜ต์…˜

    ์ฟ ํ‚ค๊ฐ€ ์–ธ์ œ ๋ณด๋‚ด์ ธ์•ผ ํ•˜๋Š”์ง€ ์ปจํŠธ๋กคํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ path ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ๋„๋ฉ”์ธ ์˜ต์…˜์„ ํ™•์ธํ•ด์„œ ๊ฐ™์€ ๋„๋ฉ”์ธ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ๋‚˜๋ฉด, path ์˜ต์…˜ ๋น„๊ต๊ฐ€ ์ผ์–ด๋‚œ๋‹ค. ์ด ๋•Œ ๊ธ€์ž ๋น„๊ต๊ฐ€ ์ผ์–ด๋‚˜๋Š”๋ฐ, ์˜ˆ๋ฅผ๋“ค์–ด, path=/blog๋กœ ์ง€์ •๋˜์–ด ์žˆ๋‹ค๋ฉด, /blog, /blogminju์™€ ๊ฐ™์ด /blog๋กœ ์‹œ์ž‘๋˜๋Š” ๊ณณ์€ ์ „๋ถ€ ์ฟ ํ‚ค๊ฐ€ ๋ณด๋‚ด์งˆ ๊ฒƒ์ด๋‹ค.

    3-3. Expires/Max-Age ์˜ต์…˜

    ์ฟ ํ‚ค๋Š” ๋งŒ๋ฃŒ๊ธฐ๊ฐ„๊ณผ ํ•จ๊ป˜ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€์— ๋”ฐ๋ผ ์„ธ์…˜์ฟ ํ‚ค์™€ ์˜์†์ฟ ํ‚ค๋กœ ๋‚˜๋‰œ๋‹ค.

    • ์„ธ์…˜ ์ฟ ํ‚ค๋Š” ์„ธ์…˜์ด ์ข…๋ฃŒ๋  ๋•Œ ์‚ฌ๋ผ์ง„๋‹ค. (๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ซํ˜”์„ ๋•Œ) ์œ„์˜ ์˜ˆ์‹œ์—์„œ Session์ด๋ผ๊ณ  ์ ํ˜€ ์žˆ๋Š” ๊ฒƒ์ด ์„ธ์…˜ ์ฟ ํ‚ค์ด๋‹ค.
    • ์˜์†์ฟ ํ‚ค๋Š” ์ง€์ •๋œ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ์ฟ ํ‚ค์ด๋‹ค.

    ์ฐธ๊ณ ๋กœ ์ฟ ํ‚ค๋Š” ์ €์žฅ์šฉ๋Ÿ‰์ด ์ œํ•œ๋˜์–ด ์žˆ๋Š”๋ฐ, ๋”ฐ๋ผ์„œ ์šฉ๋Ÿ‰์ด ๋‹ค ์ฐจ๊ฒŒ ๋˜๋ฉด ์ตœ์‹  ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•Œ์•„์„œ ๊ธฐ์กด์˜ ์ฟ ํ‚ค๋“ค์„ ์‚ญ์ œํ•  ๊ฒƒ์ด๋‹ค.

    3-4. HttpOnly ์˜ต์…˜

    HttpOnly ์˜ต์…˜์€ Cross-site ์Šคํฌ๋ฆฝํŒ…(XSS) ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ์ด ์˜ต์…˜์ด ์ง€์ •๋˜์–ด ์žˆ์œผ๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Document.cookie API์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ณ , ์„œ๋ฒ„์— ์ „์†ก๋งŒ ๋  ์ˆ˜ ์žˆ๋‹ค.

    ๋‹ค์Œ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด๋‹น API๋กœ ์ฟ ํ‚ค์— ์ ‘๊ทผํ•˜์—ฌ ์ฟ ํ‚ค๋ฅผ ๋งŒ๋“ค๊ณ  ์ง€์šฐ๋Š” ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋‚ด ์ด๋ฆ„์œผ๋กœ ๋œ ์ฟ ํ‚ค ๋งŒ๋“ค๊ธฐ

    document.cookie = "name=Minju; SameSite=None; Secure"
    'name=Minju; SameSite=None; Secure'

    3-5. Secure ์˜ต์…˜

    secure์˜ต์…˜์ด ์ง€์ •๋˜์–ด ์žˆ๋Š” ์ฟ ํ‚ค๋Š” ์š”์ฒญ์ด SSL์ด๋‚˜ HTTPS ํ”„๋กœํ† ์ฝœ ์œ„์—์„œ ์ด๋ค„์งˆ ๋•Œ์—๋งŒ ์„œ๋ฒ„์— ์ „์†ก๋  ๊ฒƒ์ด๋‹ค. Secure ์˜ต์…˜์ด ์žˆ๋”๋ผ๋„ ๋ณธ์งˆ์ ์œผ๋กœ ์ฟ ํ‚ค๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ์ฟ ํ‚ค์— ์ ˆ๋Œ€ ์ €์žฅํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

    3-6. SameSite ์˜ต์…˜

    SameSite๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ CSRF(Cross-Site Request Forgery)๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด HTTP ์ฟ ํ‚ค์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์ด๋‹ค. None, Lax, Strict ์„ธ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ๋Š”๋ฐ Cross-site์ธ์ง€๋ฅผ ํ™•์ธํ•˜์—ฌ ์ฟ ํ‚ค ์ „์†ก ์—ฌ๋ถ€๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

    • None : ์ œํ•œํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ, same-site์ด๋“  cross-site์ด๋“  ์ฟ ํ‚ค ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • Lax : ๊ธฐ๋ณธ์ ์œผ๋กœ same-site์ผ ๋•Œ ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋˜๋ฉฐ, cross-site์ผ ๊ฒฝ์šฐ top level navigation์ด ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ '์•ˆ์ „ํ•œ' Http ๋ฉ”์†Œ๋“œ๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ์—๋งŒ ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋œ๋‹ค.
    • Strict : same-site์ผ ๊ฒฝ์šฐ์—๋งŒ ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋œ๋‹ค.

    2020๋…„ ๊ธฐ์ค€์œผ๋กœ default ๊ฐ’์ด None ์—์„œ Lax๋กœ ๋ณ€๊ฒฝ์ด ๋˜์—ˆ๋‹ค. Lax์ผ ๊ฒฝ์šฐ ๋‚ด๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์—์„œ ๋งํฌ๋ฅผ ํ†ตํ•ด ์ฟ ํŒก์— ๋“ค์–ด๊ฐ”์„ ๋•Œ, ๋‚ด๊ฐ€ ๊ฒ€์ƒ‰ํ–ˆ๋˜ ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ๋Š” ์ฟ ํ‚ค๊ฐ’์ด ์ฟ ํŒก์— ์ „์†ก๋˜์–ด, ์ฟ ํŒก์ด ๋‚˜์—๊ฒŒ ๋งž์ถค ์ปจํ…์ธ ๋ฅผ ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋“ฑ์˜ ์—ญํ• ์„ ํ•œ๋‹ค. ๋งŒ์•ฝ Strict๋กœ ๋˜์–ด ์žˆ๋‹ค๋ฉด ์ฟ ํŒก์— ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋˜์ง€ ์•Š์•„ ๋งž์ถค ๊ด‘๊ณ ๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์„ ๊ฒƒ์ด๋‹ค.

    ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์˜ต์…˜๋“ค์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด์ž.

    ๋‚ด๊ฐ€ ์ ‘์†ํ•œ ์‚ฌ์ดํŠธ๋ฅผ https://minju.com์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, lax, strict์— ๋Œ€ํ•ด ์•„๋ž˜ ์˜ˆ์‹œ๋“ค์€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ๊นŒ?

     

    case 1.<img src="https://ariel.com/1.png" />

    minju.com์—์„œ ์ด๋ฏธ์ง€ ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ariel.com์˜ ์ด๋ฏธ์ง€ ํ•˜๋‚˜๋ฅผ ๊ฐ€์ ธ์™”๋‹ค. same-site๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— Lax์™€ Strict๋ชจ๋‘ ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋˜์ง€ ์•Š๋Š”๋‹ค.

     

    case 2. <a href="https://ariel.com/blog/samesite.html">Link</a>

    ๋งํฌ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์— ์ด๋™ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ์ตœ์ƒ์œ„ navigation์— ๋ณ€๋™์ด ์ผ์–ด๋‚˜๋ฏ€๋กœ, Lax์—์„œ๋Š” ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋˜์ง€๋งŒ, strict์—์„œ๋Š” ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋˜์ง€ ์•Š๋Š”๋‹ค.

     

    case 3. <iframe id="if" src="/hello"></iframe>
    <iframe id="if" src="/hello"></iframe>
    <script> document.getElementById("if").contentDocument.location.href="https://ariel.com"
    iframe ๋‚ด๋ถ€์—์„œ ariel.com์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋  ํ…๋ฐ, top-level navigation์ด ์•„๋‹ˆ๊ธฐ ๋Œ€๋ฌธ์— Lax์™€ Strict๋ชจ๋‘์—์„œ ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋˜์ง€ ์•Š๋Š”๋‹ค.

     

    case 4.document.location.href="https://ariel.com"</script>

    ์ตœ์ƒ๋‹จ์—์„œ navigation ๋ณ€๋™์ด๊ธฐ ๋•Œ๋ฌธ์— Lax์ผ ๋•Œ๋Š” ์ฟ ํ‚ค์ „์†ก, Strict์ผ ๋•Œ๋Š” ์ฟ ํ‚ค์ „์†ก์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

     

    Same-site ์˜ต์…˜์„ ๋ณด๋‹ค๋ณด๋ฉด, ๋‘ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์ƒ๊ธด๋‹ค.

    ์ฒซ ๋ฒˆ์งธ, CSRF๋ž€ ๋ฌด์—‡์ผ๊นŒ?

    ์‚ฌ์ดํŠธ ๊ฐ„ ์š”์ฒญ ์œ„์กฐ์˜ ์ค„์ž„๋ง๋กœ, ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํŠน์ • ์š”์ฒญ์„ ๋ณด๋‚ด๋„๋ก ์œ ๋„ํ•˜๋Š” ๊ณต๊ฒฉ ํ–‰์œ„๋ฅผ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด๊ฐ€ A๋ผ๋Š” ์›น์‚ฌ์ดํŠธ์— ๋กœ๊ทธ์ธ ๋˜์–ด์žˆ๋Š” ์ƒํƒœ์—์„œ ํ”ผ์‹ฑ ์‚ฌ์ดํŠธ๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ, ํ•ด๋‹น URL์„ ํด๋ฆญํ•จ๊ณผ ๋™์‹œ์— A๋ผ๋Š” ์›น์‚ฌ์ดํŠธ์—์„œ ๋ฐ›์•„์˜จ ๋‚ด ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  A์›น์‚ฌ์ดํŠธ์— ๋‚ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•ด๋‹ฌ๋ผ๊ณ  ํ•˜๋Š” ์š”์ฒญ, ํ˜น์€ ๋ˆ์„ ์†ก๊ธˆํ•ด๋‹ฌ๋ผ๊ณ  ํ•˜๋Š” ์š”์ฒญ๋“ค์„ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

     

    **๋น„๊ต, XSS๋ž€?
    Cross Site Scripting ์˜ ์ค„์ž„๋ง๋กœ, ๊ณต๊ฒฉ์ž๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ธก ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์›น ์‚ฌ์ดํŠธ์— ์‚ฝ์ž…ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ˆ˜ํ–‰๋˜๊ฒŒ ํ•˜๋Š” ๊ณต๊ฒฉ์˜ ์œ ํ˜•`์„ ๋งํ•œ๋‹ค. ์‚ฝ์ž…๋œ ์ฝ”๋“œ๋Š” ํ”ผํ•ด ์‚ฌ์šฉ์ž์˜ ์‚ฌ์ดํŠธ ๊ถŒํ•œ ์ฟ ํ‚ค๋ฅผ ๊ณต๊ฒฉ์ž์—๊ฒŒ ๋ณด๋‚ด๋Š” ์ข…๋ฅ˜์˜ ์•…์„ฑ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ณต๊ฒฉ์ž๋Š” ์ „๋‹ฌ๋ฐ›์€ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•ด ๋งˆ์น˜ ํ”ผํ•ด ์‚ฌ์šฉ์ž์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์œ„์žฅํ•˜์—ฌ ์‚ฌ์ดํŠธ์— ๋กœ๊ทธ์ธํ•˜๊ณ  ํ”ผํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

    Cross-site ๊ธฐ์ค€์€ ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

    HTTP ๋ชฉ์ ์ง€์˜ ์‚ฌ์ดํŠธ์™€ ํ˜„์žฌ ์ฃผ์†Œ ํ‘œ์‹œ์ฐฝ์— ์žˆ๋Š” ์‚ฌ์ดํŠธ ๊ฐ„์— ๋น„๊ต๊ฐ€ ์ผ์–ด๋‚˜๋Š”๋ฐ, Same-site์ธ์ง€ ํŒ๋ณ„ํ•  ๋•Œ์—๋Š” ๋ชจ๋“  ๋„๋ฉ”์ธ์„ ํ™•์ธํ•˜์ง€ ์•Š๊ณ , .com/.net/.org๊ฐ™์€ public suffix์˜ ์•ž์— ์žˆ๋Š” ๋„๋ฉ”์ธ๊นŒ์ง€๋งŒ ๋น„๊ต๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค. (Same Origin์ธ์ง€ ํ™•์ธํ•  ๋•Œ์—๋Š”, scheme(http)์™€, Host, Port ๋ชจ๋‘๋ฅผ ํ™•์ธํ•˜์—ฌ ์ด ์…‹ ์ค‘์— ํ•˜๋‚˜๋ผ๋„ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ Origin์ด๋ผ๊ณ  ํŒ๋ณ„ํ•œ๋‹ค.)

     

    public-suffix์˜ ์˜๋ฏธ๋ฅผ ์ข€ ๋” ์งš๊ณ  ๊ฐ€์•ผํ•˜๋Š”๋ฐ, public suffix๋Š” ๋ฐ”๋กœ ๊ทธ ์•ž์—์žˆ๋Š” ๋„๋ฉ”์ธ์„ ์œ ์ €๋“ค์ด ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. publicsuffix.org ๋ผ๋Š” ๊ณณ์—์„œ ์ด๊ฑธ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์˜ˆ๋ฅผ ๋“ค์–ด ์ด ์‚ฌ์ดํŠธ์— ๋ณด๋ฉด github.io์ž์ฒด๊ฐ€ public suffix๋กœ ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ same-site๋ฅผ ํŒ๋ณ„ํ•  ๋•Œ, minju.github.io ๊นŒ์ง€ ๋น„๊ตํ•  ๊ฒƒ์ด๋‹ค.

     

    ์˜ˆ์‹œ๋ฅผ ํ•œ๋ฒˆ ๋ณด๋„๋ก ํ•˜์ž.

    1) https://www.minju-k.com/path.page.html
    2) https://blog.minju-k.com:8443/sop.html
    3) http://www.minju-k.com/index.html
    4) https://minju.github.io/index.html
    5) https://hello.github.io/index.html

    ์œ„ ์˜ˆ์‹œ์—์„œ, 1,2,3์€ Same-site๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ณ , 4,5๋ฒˆ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” github.io ์ž์ฒด๊ฐ€ public suffix์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ์•ž๋‹จ๊ณ„์˜ ๋„๋ฉ”์ธ์ด ๋‹ฌ๋ผ cross-site๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ์„ธ์…˜์ด๋ž€?

    ์ฟ ํ‚ค์— ๋Œ€ํ•ด ์‚ดํŽด๋ดค์œผ๋‹ˆ, ์„ธ์…˜์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž.

     

    ์„ธ์…˜๊ณผ ์ฟ ํ‚ค์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์œ„์น˜์ธ๋ฐ, ์ฟ ํ‚ค์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ด์ง„๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด, ์„ธ์…˜์˜ ๊ฒฝ์šฐ ์„ธ์…˜ ID๋งŒ ์ฟ ํ‚ค์— ์ „๋‹ฌํ•ด์ฃผ๊ณ , ์ •๋ณด๋Š” ์„ธ์…˜ DB์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค. ๊ฐ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ณ ์œ  ID๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ, ์„ธ์…˜ ID๋กœ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์š”๊ตฌ์— ๋งž๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ, ๋ณด์•ˆ ๋ฉด์—์„œ ์ฟ ํ‚ค๋ณด๋‹ค ์šฐ์ˆ˜ํ•˜๋‹ค.

     

    ์„ธ์…˜์€ ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋ฒ„ ์ธก์—์„œ ๊ฐ•์ œ ํƒˆํ‡ด, ๋„ทํ”Œ๋ฆญ์Šค ๊ณ„์ • 4๋ช…๊นŒ์ง€ ์ œํ•œ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ์†๋„๊ฐ€ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ๊ณ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฐ๋‹นํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๋งค ์š”์ฒญ๋งˆ๋‹ค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฟ ํ‚ค๋กค ํ†ตํ•ด ๋ณด๋‚ด์˜จ ์„ธ์…˜ ID๋ฅผ ์„ธ์…˜ DB๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

     

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

     

     

    *์ฐธ๊ณ 

    https://web.dev/i18n/ko/samesite-cookies-explained/
    https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies
    https://www.youtube.com/watch?v=tosLBcAX1vk&t=417s
    https://www.youtube.com/watch?v=Q3YuKipzPbs&t=811s

    ๋Œ“๊ธ€

Designed by Tistory.