โš”๏ธ๐Ÿ”ฐJavaScript ๋ณด์•ˆ๐Ÿ›ก๏ธโš”๏ธ

5746 ๋‹จ์–ด javascriptwebdevsecurity

์ฝ”๋“œ์˜ ๋ณด์•ˆ ์„ธ๋ถ€ ์ •๋ณด


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

์–ด๋–ค ๊ฒฝ์šฐ, ๊ทธ๋“ค์€'ํ•œ ์ค„'์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ์„ ๋”์šฑ ์‰ฝ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ, ์‚ฌ๋žŒ๋“ค์ด ์œ ์ผํ•˜๊ฒŒ ํ•ด์•ผ ํ•  ์ผ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํฌ๋งท ๋„๊ตฌ๋ฅผ ์˜จ๋ผ์ธ์œผ๋กœ ๋ถ™์—ฌ์„œ ํŒ์—…ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.์ฝ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค!
๋‹ค๋ฅธ ํ•œํŽธ, ์ผ๋ถ€ API๋Š” API ํ‚ค๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.์ด ์ค‘ ์ผ๋ถ€ API๋Š” IP, ๋„๋ฉ”์ธ ์ด๋ฆ„ ๋“ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ API ํ‚ค ์‚ฌ์šฉ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋˜ ๋‹ค๋ฅธ ๋ณด์•ˆ ์ธ์ฆ์„œ ๊ณต์œ ๋ฅผ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์€ environment variables ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์–ด๋–ค ์ด์œ ๋กœ๋“  ์ฝ”๋“œ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด NodeJS์™€ ๊ฐ™์€ ์„œ๋ฒ„ ์ธก ์ฝ”๋“œ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ˜จ ์‚ฌ์ดํŠธ ๊ฐ„ ์Šคํฌ๋ฆฝํŠธ ๊ณต๊ฒฉ ์ผ๋ช… XSS๐Ÿ˜ฑ


๋‚˜๋Š” ๋„ˆ์˜ ์ƒํ™ฉ์„ ๋ชจ๋ฅด๊ฒ ๋‹ค. ๋‹จ์ง€ XSS ๊ณต๊ฒฉ์„ ๋“ค์—ˆ์„ ๋ฟ์ด๋‹ค!๋‚˜๋Š” ์ด๋ฏธ ๋ชน์‹œ ๋†€๋ž๋‹ค.
์ด๋Ÿฐ ๊ณต๊ฒฉ์€ ์ „๋‹จ์—๋งŒ ์ ์šฉ๋œ๋‹ค.๋ฐฑ์—”๋“œ๊ฐ€ ์‰ฝ๊ฒŒ ๊ณต๊ฒฉ๋ฐ›์ง€ ์•Š์„ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ XSS ๊ณต๊ฒฉ์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ์Šต๊ฒฉ์€๐Ÿ‘น ์•…์˜์ ์ธ JavaScript๋ฅผ ์ฃผ์ž…ํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ, ์ฝ”๋“œ๋ฅผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด, ๋งŽ์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—… ๋ฐฉ์‹์ด๋‹ค.๊ตฌ๊ธ€์ด๋‚˜ ํ•ญ๊ณต์‚ฌ ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€๋ฉด ๋กœ์ปฌ ์ €์žฅ์†Œ ๋ฐฉ๋ฌธ ๋“ฑ์„ ํ†ตํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋Œ€๋Ÿ‰์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•œ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์„ธ์š”.
๋ณด์•ˆ ์ „๋ฌธ๊ฐ€ ๋•๋ถ„์— ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €๋Š” innerHTML์—์„œ ์‹คํ–‰๋˜๋Š” ํƒœ๊ทธ๋ฅผ ๋ง‰์•„์„œ ์ด ์ ์„ ์‹คํ˜„ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.๊ทธ๋ž˜, ๋„ˆ๋Š” ์—ฌ์ „ํžˆ ์ฃผ์‚ฌ๋ฅผ ๋†“์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์šดํ–‰ํ•˜์ง€๋Š” ์•Š์„ ๊ฑฐ์•ผ.
ํ•˜์ง€๋งŒ!!ํ•˜๋‚˜์ฏค์€ ์žˆ๊ฒ ์ง€๋งŒinnerHTML ์ฃผ์ž…์„ ํ†ตํ•ด ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
<img src="" onerror="alert('xss')/>
๋”ฐ๋ผ์„œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ด๋ฏธ์ง€ ์›๋ณธ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.๊ฒฝ๊ณ ๊ฐ€ ์—†์œผ๋ฏ€๋กœ alert () ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
innerHTML์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ํ…์ŠคํŠธ ๋‚ด์šฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋•Œ๋•Œ๋กœ innerHTML์ด ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋Ÿฐ ์ƒํ™ฉ์ด๋ผ๋ฉด ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์ „์— ์ •๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.sanitize-html๋ผ๋Š” ์•„์ฃผ ๋ฉ‹์ง„ NPM ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.์ด ํŒจํ‚ค์ง€๋Š” ํ…์ŠคํŠธ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ํ•„์š”ํ•˜์ง€ ์•Š์€ ํƒœ๊ทธ๋ฅผ ์‚ญ์ œํ•˜์—ฌ ์•…์„ฑ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.์„œ๋ฒ„ ์ชฝ์—์„œ ์ฒญ์†Œ๋„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.ํผ์— ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•  ๋•Œ, ๋‚˜๋Š” ์•…์„ฑ ์ฝ”๋“œ๋ฅผ ์ณ๋‹ค๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ์ฝ”๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋  ๊ฒƒ์ด๋‹ค.์ผ๋‹จ ๊ทธ๊ฒƒ์ด ๋ Œ๋”๋ง๋˜๋ฉด, ๊ทธ๊ฒƒ์€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.์„œ๋ฒ„์—์„œ ์ด NPM ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ


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

์‚ฌ์ดํŠธ ๊ฐ„ CSRF ์š”์ฒญ


์ด๋Ÿฐ ๊ณต๊ฒฉ์€ ์‚ฌ๋žŒ๋“ค์ด ๋‹น์‹ ์„ ์†์—ฌ์„œ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋Š” ๊ฒƒ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ด ๋งํฌ๋Š” ์ค€๋น„๋œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๊ทธ๋“ค์€ ๋‹น์‹ ์˜ ๋กœ์ปฌ ์ฟ ํ‚ค๋ฅผ ๋‚จ์šฉํ•˜๊ณ  ํ†ต์ƒ์ ์œผ๋กœ ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆ„๋Š” ํŽ˜์ด์ง€์— ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
์ด๊ฒƒ์€ ์„œ๋น„์Šค ๋ฐฉ๋ฉด์˜ ๋ฌธ์ œ ๊ฐ™์ง€๋งŒ, ์–ธ๊ธ‰ํ•  ๋งŒํ•˜๋‹ค.์ƒ์ƒ:
์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹น์‹ ์€ "x"์‚ฌ์ดํŠธ์— ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋‹น์‹ ์˜ ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ๋‹น์‹ ์˜ ์ •๋ณด๋ฅผ ํ›”์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค.๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์€ ๋„ˆ๋ฅผ ํ—ˆ์œ„ ์‚ฌ์ดํŠธ๋กœ ์ธ๋„ํ•  ๊ฒƒ์ด๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ดpaypal์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์‚ฌ์ดํŠธ๋ฅผ ๊ฐ€์ •ํ•œ๋‹ค.๊ทธ๋“ค์€ ๋‹น์‹ ์˜ ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ์–ป์€ ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณด๋‚ด๊ณ  ์‹ถ์ง€ ์•Š์€ ์‚ฌ๋žŒ์—๊ฒŒ ๋ˆ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.์ด๊ฒƒ์€ ํ•ด์ปค์—๊ฒŒ ๊ธด ๊ณผ์ •์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿฌํ•œ ๊ณต๊ฒฉ์€ NodeJS๋‚˜ JavaScript ๊ธฐ์ˆ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์›น ๊ฐœ๋ฐœ์—๋„ ๋ณดํŽธ์ ์œผ๋กœ ์ ์šฉ๋œ๋‹ค.
CSRF๋Š” ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?๋งž๋‹ค
CSRF ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๋Š” 3๊ฐ€์ง€ ๊ธฐ์ˆ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋™์ผํ•œ ์‚ฌ์ดํŠธ ์ฟ ํ‚ค ์‚ฌ์šฉ ๋ฐฉ๋ฒ•: ์ด๊ฒƒ์€ ์ƒˆ๋กœ ๊ฐœ๋ฐœ๋œ ์†์„ฑ์œผ๋กœ ๊ท€ํ•˜์˜ ์ฟ ํ‚ค์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ3์ž๊ฐ€ ํŠน์ •ํ•œ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ์ง€์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ์†์„ฑ์€ ์„œ๋ฒ„์—์„œ ์„ค์ •ํ•˜๊ณ  ์ฟ ํ‚ค ์ž์ฒด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์งˆ๋ฌธ ์‘๋‹ต: ์ถ”๊ฐ€ ๋ณดํ˜ธ์ธต์œผ๋กœ์„œ ํผ์„ ์ œ์ถœํ•  ๋•Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์งˆ๋ฌธ ์‘๋‹ต์„ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋„์ „ ์‘๋‹ต์˜ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • - ์ธ์ฆ๋ฒˆํ˜ธ ์ธ์ฆ(๋งค์šฐ ์œ ํ–‰)
    - ์•”ํ˜ธ ๋˜๋Š” ๊ฐœ์ธ ์ •๋ณด ํ™•์ธ ์š”์ฒญ
    - ์ผํšŒ์šฉ ํ† ํฐ ๋ฐœํ–‰
    ์ฃผ์˜: ๋†’์€ ์•ˆ์ „์„ฑ์ด ํ•„์š”ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์˜ํŒจ์™€ ์งˆ๋ฌธ ์‘๋‹ต์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ „์„ฑ์„ ํ™•๋ณดํ•ด์•ผ ํ•œ๋‹ค.
    3. ๋ฐ˜CSRF ์˜ํŒจ: ์‚ฌ์šฉ์ž๊ฐ€ ์ •๋ณด๋ฅผ ์ œ์ถœํ•˜๊ณ  ์‚ฌ์ดํŠธ์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ฐ˜CSRF ์˜ํŒจ๋„ ์ฟ ํ‚ค ์š”์ฒญ์— ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค.๊ทธ๋ฆฌ๊ณ  ์ด ์š”์ฒญ์€ ๊ฒ€์ฆ ๊ณผ์ •์„ ํ†ตํ•ด ์‹คํ–‰๋˜๋ฉฐ, ๊ทธ ์ค‘์—์„œ ์ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „์— ์ด ์˜ํŒจ์˜ ์ง„์‹ค์„ฑ, ์‹ฌ์ง€์–ด ์กด์žฌ์„ฑ์„ ๊ฒ€์ฆํ•œ๋‹ค.์˜ํŒจ๊ฐ€ ๋ถ€์กฑํ•˜๊ฑฐ๋‚˜ ์ •ํ™•ํ•˜์ง€ ์•Š์œผ๋ฉด ์š”์ฒญ์„ ๊ฑฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์†Œ์Šค ๊ฐ„ ๊ณต์œ ๋ฅผ ํ†ตํ•œ ๋ฒˆ๊ฑฐ๋กœ์šด CORS๐Ÿ˜…


    ๋ธŒ๋ผ์šฐ์ € ์ธก ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜จ ์š”์ฒญ์€ ๊ฐ™์€ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ๋ฐฑ์—”๋“œ์—๋งŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฐœ๋…์ด๋‹ค.
    ์–ด๋–ค ์ด์œ ๋กœ๋“  ํ”„๋ŸฐํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ํ˜ธ์ŠคํŒ…ํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ์‘๋‹ต์— ํ—ค๋”๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ๊ฐœ๋…์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋‹ค๋ฅธ ์„œ๋ฒ„์™€'๋Œ€ํ™”'๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ, ์ •ํ™•ํ•œ ์„œ๋ฒ„ ๋์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.Cors NPM ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๋…ธ๋“œJS ์ฝ”๋“œ
    app.use(function(req, res, next) {
      res.header("Access-Control-Allow-Origin", "*");
      res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
      res.json({data: [1,2,3,4]})
    });
    
    ์ฐธ๊ณ : CORS ๊ฐœ๋…์€ ํ”„๋ŸฐํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์‹œ๋„ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.nodejs, php๋“  ๋ญ๋“ 

    ์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ