๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์‹œ๋„/Code-States

[D+67] Browser Security

by ๐Ÿ‡๋ฐ•๋ด‰๋ด‰๐Ÿ‡ 2020. 12. 24.

 

D+67

-  Browser Security -

(XSS, CORS)

 


 

 

XSS

 

 

XSS๋ž€?

XSS๋Š” ์ •์ƒ์ ์ธ ์›น ์•ฑ์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฃผ์ž…ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ์„ ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋Š” ๊ณต๊ฒฉ์œผ๋กœ

์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ํด๋ผ์ด์–ธํŠธ(์‚ฌ์šฉ์ž)๊ฐ€ ์„œ๋ฒ„๋ฅผ ์‹ ๋ขฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ์ด๋‹ค.

 

๋‹จ์ˆœํžˆ ์‚ฌ์šฉ์ž๋ฅผ ๊ณจํƒ•๋จน์ด๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋  ์ˆ˜๋„ ์žˆ์ง€๋งŒ

๋งŒ์•ฝ ์ ‘์†ํ•œ ํŽ˜์ด์ง€๊ฐ€ ์€ํ–‰์‚ฌ์ดํŠธ๋‚˜ ํšŒ์›๊ฐ€์ž…์ฐฝ๊ณผ ๊ฐ™์€ ๋‹ค์†Œ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŽ˜์ด์ง€๋ผ๋ฉด

์–ด์ฉŒ๋ฉด ๋‚ด ์ •๋ณด๋ฅผ ํ•ด์ปค์—๊ฒŒ ์ˆœ์ˆ˜ํžˆ ์ค„ ์ˆ˜๋„ ์žˆ๋Š” ๊ฝค๋‚˜ ๋ฌด์‹œ๋ฌด์‹œํ•œ ๊ณต๊ฒฉ์ด๋‹ค.

 

XSS ๋ฐฉ์–ด ๊ธฐ๋ฒ•

ํ˜„๋Œ€์—์„œ์˜ ๋ธŒ๋ผ์šฐ์ € ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ผ๋ฐ˜์ ์ธ XSS ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ์–ด๋Š” ๋งˆ๋ จํ•ด๋‘๊ณ  ์žˆ๋Š” ์ƒํƒœ์ด๋‹ค.

 

ํ•˜์ง€๋งŒ ๊ทธ๋Ÿผ์—๋„ ํ•ด์ปค๋“ค์€ XSS ๊ณต๊ฒฉ์œผ๋กœ ์–ธ์ œ ์šฐ๋ฆฌ์•ž์— ๋‹ค๊ฐ€์˜ฌ์ง€ ๋ชจ๋ฅธ๋‹ค.

 

์ด๋ฅผ ์˜ˆ๋ฐฉํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๋ฐฉ๋ฒ•์ด ์ •๊ทœํ‘œํ˜„์‹(Regular Expression)์ด๋‹ค.

 

์ •๊ทœ ํ‘œํ˜„์‹์€ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘์˜ ํ•˜๋‚˜๋กœ ํŠน์ •ํ•œ ์กฐ๊ฑด์˜ ๋ฌธ์ž๋ฅผ '๊ฒ€์ƒ‰'ํ•˜๊ฑฐ๋‚˜

'์น˜ํ™˜'ํ•˜๋Š” ๊ณผ์ •์„ ๋งค์šฐ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ˆ˜๋‹จ์ด๋‹ค.

 

์ •๊ทœํ‘œํ˜„์‹ ๋ง๊ณ ๋„ XSS๋ฅผ ๋ฐฉ์–ดํ•˜๋Š” ๊ธฐ๋ฒ•์€ ๋งŽ์ด ์žˆ์œผ๋‹ˆ ๋”์šฑ ์ฐพ์•„๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

 


CORS (Cross Origin Resource Sharing)

 

 

CORS ๊ฐœ๋…

์—ฌ๊ธฐ domain-a.com๋ผ๋Š” ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ๋‹ค.

 

์ด ๊ณต๊ฐ„์€ domain-a.com์ด๋ผ๋Š” ๊ณณ์˜ ๊ณต๊ฐ„์ด๊ธฐ ๋•Œ๋ฌธ์—

domain-a.com์˜ ์›น ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜จ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ์— domain-a.com๊ณต๊ฐ„์—์„œ domain-b.com์˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์„๊นŒ?

 

์ด๋Š” CORS๋ฅผ ํ†ตํ•ด domain-a.com์—์„œ ํŠน์ • ๋„๋ฉ”์ธ์€ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ด ์ค€๋‹ค.

 

์ฆ‰, CORS๋Š” ํ•œ๋งˆ๋””๋กœ ๋‹ค๋ฅธ Origin์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•œ ๊ตฌ์กฐ์ด๋‹ค.

 

CORS๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ

๊ณผ๊ฑฐ์—๋Š” ๊ธฐ์ˆ ์ ์ธ ๋ฉด๊ณผ ๋ณด์•ˆ์ ์ธ ๊ฒƒ์„ ๊ณ ๋ คํ•ด ๋„๋ฉ”์ธ์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ์—” ์š”์ฒญ์„ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์—†๋„๋ก ํ•˜์˜€๋‹ค.

 

ํ•˜์ง€๋งŒ ์š”์ฆ˜์—” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ณ ๋„ํ™”๊ฐ€ ๋˜์–ด ๋‹ค๋ฅธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ •๋ณด๋ฅผ ์ฐธ๊ณ ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ

์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” CORS๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. 

 

CORS ์‚ฌ์šฉ 1 : Simple Request

• ์š”์ฒญ ๋ฉ”์†Œ๋“œ๋Š” GET, HEAD, POST ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค.

 

• Accept, Aceept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width, Width๋ฅผ ์ œ์™ธํ•œ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

 

• ๋งŒ์•ฝ Content-Type๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” application/x-www-form-urlencoded, multiplart/form-data, text/plain๋งŒ ํ—ˆ์šฉ๋œ๋‹ค.

 

CORS ์‚ฌ์šฉ 2 : Preflight Request

• ์š”์ฒญ ๋ฉ”์†Œ๋“œ๋Š” PUT, DELETE, OPTIONS, PATCH๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

Preflight Request๋Š” ์ •์‹์œผ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ๋‚ ๋ฆฌ๊ธฐ ์ „์— OPTIONS ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋จผ์ € ์‹ค์ œ ์š”์ฒญ์ด ์ „์†กํ•˜๊ธฐ์— ์•ˆ์ „ํ•œ ๊ณณ์ธ์ง€ ํ™•์ธํ•œ ๋‹ค์Œ์— ์•ˆ์ „ํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋˜๋ฉด ์‹ค์ œ ์ •์‹ ๋ฉ”์†Œ๋“œ๋ฅผ ๋‚ ๋ฆฌ๋„๋ก ํ•œ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€