[CS] ๐Ÿ”ฅ CORS

Kledยท2023๋…„ 4์›” 17์ผ
0

[CS]

๋ชฉ๋ก ๋ณด๊ธฐ
4/7
post-thumbnail

CORS์˜ ์ •์˜

CORS๋Š” Cross Origin Resource Sharing์˜ ์•ฝ์ž๋กœ, ๊ต์ฐจ ์ถœ์ฒ˜ ๊ณต์œ ๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.

Origin์€ โ‘  scheme, โ‘ก host, โ‘ข port ๋กœ ์ด๋ฃจ์–ด์ง„ ๋„๋ฉ”์ธ์„ ์˜๋ฏธํ•œ๋‹ค. (IE์˜ ๊ฒฝ์šฐ port๋ฅผ ๋น„๊ตํ•˜์ง€ ์•Š์Œ)

https://www.naver.com/

โ‘  scheme : https
โ‘ก host: www.naver.com
โ‘ข port: null (๊ณต๊ฐœ๋˜์ง€ ์•Š์Œ)

ํ˜„์žฌ โ‘  ์ž์‹ ์ด ์†ํ•œ ์ถœ์ฒ˜(Origin)๋ฅผ ๊ธฐ์ค€์œผ๋กœ โ‘ก ๋‹ค๋ฅธ ์ถœ์ฒ˜(Origin)์— API๋ฅผ ์š”์ฒญํ•˜๊ฒŒ ๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ด ์š”์ฒญ์œผ๋กœ ๋„˜์–ด์˜ค๋Š” ๊ฒฝ๊ณผ๊ฐ€ ์•ˆ์ „ํ•œ์ง€ ํŒ๋‹จํ•˜๊ฒŒ ๋˜๋Š”๋ฐ,

์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ์ถœ์ฒ˜๊ฐ€ โ‘  ์ž์‹ ์ด ์†ํ•œ ์ถœ์ฒ˜๊ฐ€ ์•„๋‹Œ, โ‘ก ๋‹ค๋ฅธ ์ถœ์ฒ˜์—ฌ๋„ ์„œ๋กœ ์˜ˆ์ƒ๋˜๋Š” ์ถœ์ฒ˜๋ผ๋ฉด ์š”์ฒญ์— ๋Œ€ํ•ด ํ—ˆ์šฉํ•ด์ฃผ๋Š” ์‘๋‹ต ํ—ค๋”๋ฅผ ๋ณด๋‚ด, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

์ด๋ฅผ CORS(Cross Origin Resource Sharing)์ด๋ผ ํ•œ๋‹ค.


CSRF ๊ณต๊ฒฉ

์ดˆ๊ธฐ์˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ด์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ๋ชจ๋‘ ์ž์œ ๋กญ๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ , ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ดˆ๊ธฐ์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋งŽ์€ ๋ณด์•ˆ์ƒ ๋ฌธ์ œ์ ์„ ์•ˆ๊ณ  ์žˆ์—ˆ๋‹ค. ํ•ด์ปค๊ฐ€ ๋งŒ๋“  ํ”ผ์‹ฑ ์‚ฌ์ดํŠธ์— ์ ‘์†ํ–ˆ์„ ๋•Œ, ํ•ด์ปค๊ฐ€ ์›ํ•˜๋Š” ์š”์ฒญ๋Œ€๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ๊ฒƒ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ๋ณด์•ˆ์ƒ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

์ด๋ฅผ CSRF ๊ณต๊ฒฉ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค



SOP์˜ ํƒ„์ƒ

์น˜๋ช…์ ์ธ ๋ณด์•ˆ ๋‹จ์ ์„ ์•ˆ๊ณ  ์žˆ๋˜ ์ดˆ๊ธฐ์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•œ ๊ฐ€์ง€ ๋Œ€์•ˆ์„ ์ฐพ๊ฒŒ ๋œ๋‹ค.
์ถœ์ฒ˜์— ๋Œ€ํ•ด์„œ ์™„๋ฒฝํžˆ ๊ฐ™์•„์•ผ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•ด์ฃผ๋Š” ์—„๊ฒฉํ•œ ์ถœ์ฒ˜ ๋น„๊ต ๋ณด์•ˆ ์ •์ฑ…์„ ์„ธ์šฐ๊ฒŒ ๋˜๋Š”๋ฐ,

์ด๋ฅผ SOP๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๊ทธ๋Ÿผ SOP๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์•ˆ ์ทจ์•ฝ์„ฑ์„ ๋ณด์™„ํ–ˆ๋Š” ์ง€ ์•Œ์•„๋ณด์ž.

๋„๋ฉ”์ธ์˜ ๋น„๊ต

IE ๋“ฑ์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋‹ค๋ฅธ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ,
๋Œ€๋‹ค์ˆ˜์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” scheme + host(Domain Name) + port๋กœ ์ถœ์ฒ˜ ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €๋Š” SOP ๋ฐฉ์‹์„ ํ†ตํ•ด scheme, host, port ์„ธ ๊ฐ€์ง€๊ฐ€ ๋ชจ๋‘ ๊ฐ™์œผ๋ฉด ๊ฐ™์€ ์ถœ์ฒ˜, ํ•˜๋‚˜๋ผ๋„ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ์ถœ์ฒ˜๋กœ ์ธ์‹ํ•˜์—ฌ ์š”์ฒญํ•œ ์ถœ์ฒ˜์™€ ์‘๋‹ตํ•  ์ถœ์ฒ˜๊ฐ€ ๊ฐ™์€ ๊ณณ์ธ์ง€๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋ณด์•ˆ์„ฑ์„ ๋†’์˜€๋‹ค.



SOP์˜ ํ•œ๊ณ„

์‹œ๊ฐ„์ด ํ˜๋Ÿฌ ๊ฐœ๋ฐœ์ž๋“ค์€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ ์›น์‚ฌ์ดํŠธ์˜ ์œ ์šฉํ•œ API๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์„ ์ง€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ๊นŠ์–ด๊ฐ€๋Š” ์ค‘, JSONP ๋ฅผ ์ด์šฉํ•˜์—ฌ API ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆญ์„ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋œ๋‹ค.
JSONP?


SOP ์ž…์žฅ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ๋œ ์š”์ฒญ์„ ํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ถœ์ฒ˜๋ฅผ ํ†ตํ•ด ์šฐํšŒํ•˜๊ฒŒ ๋˜๋Š” ์ทจ์•ฝ์„ฑ์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด ๋ณด์•ˆ์„ฑ ์ทจ์•ฝ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด SOP๋Š” ๋‹ค๋ฅธ ์ถœ์ฒ˜์—ฌ๋„, ์ด๋ฏธ ์˜ˆ์ƒ๋˜๋Š” ์ถœ์ฒ˜๋ผ๋ฉด ์„œ๋ฒ„์—์„œ ํ—ˆ์šฉํ•ด์ฃผ๋Š” ์‘๋‹ต ํ—ค๋”๋ฅผ ๋ณด๋‚ด, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋‚ด์ฃผ๋Š”
CORS(Cross Origin Resource Sharing) ๋ฐฉ์‹์ด ํƒœ์–ด๋‚ฌ๋‹ค.



๋ธŒ๋ผ์šฐ์ €์˜ CORS

๋ธŒ๋ผ์šฐ์ €๊ฐ€ CORS ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ด์œ 

๋ธŒ๋ผ์šฐ์ €๊ฐ€ CORS ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ด์œ ๋Š” ๋ชจ๋“  ์„œ๋ฒ„๋“ค์ด ๋‹ค CORS๋ฅผ ์ธ์ง€ํ•˜์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ฑฐ๋ถ€ํ–ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ์„œ๋ฒ„๋Š” ์ฒ˜๋ฆฌํ•ด๋ฒ„๋ฆฌ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
์„œ๋ฒ„๊ฐ€ ์•ˆ์ „ํ•˜๊ฒŒ ์š”์ฒญ์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•ด๋‹น ์š”์ฒญ(CORS)์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์‹ค์ œ ์š”์ฒญ์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€?

CORS๋Š” ๋‹ค๋ฅธ Origin์— ๋Œ€ํ•œ ์š”์ฒญ์„ ํ—ˆ์šฉํ•˜๋Š” ์ •์ฑ…์ด๋‹ค.

๊ฐ™์€ Origin์—์„œ http ํ†ต์‹ ์„ ํ•˜๋Š” ๊ฒฝ์šฐ ์•Œ์•„์„œ cookie๊ฐ€ request header์— ๋“ค์–ด๊ฐ€์ง€๋งŒ, ๊ต์ฐจ ์ถœ์ฒ˜๋กœ ์š”์ฒญํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

Origin์ด ๋‹ค๋ฅธ http ํ†ต์‹ ์—์„œ๋Š” request header์— ์ฟ ํ‚ค๊ฐ€ ์ž๋™์œผ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์—๊ฒŒ ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋‚ด๊ฐ€ ์–ด๋–ค ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ง€ ์•Œ๋ ค์ค„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

ํ”„๋ก ํŠธ > WithCredentials: true

์„œ๋ฒ„ > Access-Control-Allow-Credentials: true

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

profile
๊ณต๋ถ€ํ•˜๋Š” ๋Œ๋ฉฉ์ด ๐Ÿชจ

0๊ฐœ์˜ ๋Œ“๊ธ€