[WEB] XSS & CSRF(feat. JWT Token)

yayaya_hojinยท2024๋…„ 1์›” 26์ผ

WEB

๋ชฉ๋ก ๋ณด๊ธฐ
8/16
post-thumbnail

์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ณต๊ฒฉ XSS์™€ CSRF

๐Ÿ’ฅ XSS(Cross-Site Scripting)

XSS ๊ณต๊ฒฉ์€ Cross-Site Scripting์ด ์•ฝ์ž๋กœ ์‚ฌ์ดํŠธ์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•ด ๊ณต๊ฒฉ์„ ํ•˜๋Š” ํ–‰์œ„์ด๋‹ค.

xss_img

์ด๋ ‡๊ฒŒ ๊ณต๊ฒฉ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์นจ์ž…์ž๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ์„œ ์–ป์€ ์ •๋ณด๋กœ ์‚ฌ์šฉ์ž๋กœ ๊ฐ€์žฅํ•ด ๋„์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๐Ÿงจ CSRF(Cross-Site Request Forgery)

CSRF ๊ณต๊ฒฉ์€ Cross-Site Request Forgery์˜ ์•ฝ์ž๋กœ ์‚ฌ์ดํŠธ ๊ฐ„ ์š”์ฒญ์„ ์œ„์กฐํ•˜๋Š” ๊ณต๊ฒฉ์ด๋‹ค.

csrf_img

๋งŒ์•ฝ ์ด ์›น ์‚ฌ์ดํŠธ๊ฐ€ ์€ํ–‰ ์›น ์‚ฌ์ดํŠธ์—์„œ ๋ˆ์„ ์†ก๊ธˆํ•˜๋Š” ๊ณผ์ •์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ์นจ์ž…์ž๊ฐ€ ์‹ฌ์–ด๋†“์€ ๋งํฌ๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ์นจ์ž…์ž ์›น ์‚ฌ์ดํŠธ๋กœ ๋“ค์–ด๊ฐ€์„œ ์‚ฌ์šฉ์ž ๋ณธ์ธ๋„ ๋ชจ๋ฅด๊ฒŒ ๋ˆ์„ ์†ก๊ธˆํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋Š”, ์€ํ–‰ ์›น ์‚ฌ์ดํŠธ๋Š” ํ•ด๋‹น ์š”์ฒญ์„ ์นจ์ž…์ž๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ธ ์š”์ฒญ์œผ๋กœ ํŒ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ’พ JWT Token ์ €์žฅ ์œ„์น˜

๊ทธ๋ ‡๋‹ค๋ฉด JWT Token์„ ์–ด๋””์— ์ €์žฅํ•˜๋Š”๊ฒŒ ์ข‹์„๊นŒ?

1) Local Storage

๐Ÿ‘ ์žฅ์ : CSRF ๊ณต๊ฒฉ์— ์•ˆ์ „ํ•จ

  • Local Storage์— ๊ฒฝ์šฐ JS ์ฝ”๋“œ์— ์˜ํ•ด Request์— ๋‹ด๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ์นจ์ž…์ž๊ฐ€ ์‚ฌ์šฉ์ž๋กœ ๊ฐ€์žฅํ•˜๊ธฐ ํž˜๋“ค๋‹ค.

๐Ÿ‘Ž ๋‹จ์ : XSS ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•จ

  • Local Storage์— ๊ฒฝ์šฐ pure JS๋กœ์„œ ์นจ์ž…์ž๊ฐ€ XSS ๊ณต๊ฒฉ์œผ๋กœ JS๋ฅผ ์‹คํ–‰ํ•ด ํƒˆ์ทจํ•˜๊ธฐ ์‰ฝ๋‹ค.

2) Cookie

๐Ÿ‘ ์žฅ์ : XSS ๊ณต๊ฒฉ์ด Local Storage์— ๋น„ํ•ด ๋น„๊ต์  ์•ˆ์ „ํ•จ

  • Cookie๋Š” httpOnly ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด JS๋กœ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— Local Storage ๋ณด๋‹ค๋Š” XSS ๊ณต๊ฒฉ์ด ์‰ฝ์ง€ ์•Š๋‹ค.

๐Ÿ‘Ž ๋‹จ์ : CSRF ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•จ

  • Cookie์— ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ HTTP Request์— ๋‹ด์•„์„œ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฒฉ์ž์˜ ์›น ์‚ฌ์ดํŠธ์—์„œ ์‰ฝ๊ฒŒ ์š”์ฒญ์„ ์œ„์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿช„ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

  1. Cookie์— ์ €์žฅ ํ›„ XSS httpOnly ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด XSS ๊ณต๊ฒฉ ๋ฐฉ์ง€, sameSite=strict๋ฅผ ์‚ฌ์šฉํ•ด CSRF ๊ณต๊ฒฉ ๋ฐฉ์ง€

  2. Refresh Token์„ ์‚ฌ์šฉํ•ด ์ฟ ํ‚ค์— ์ €์žฅ์„ ํ•˜๊ณ , Access-Token์„ ์ƒˆ๋กœ๊ณ ์นจ ์‹œ Refresh Token์„ Request์— ๋‹ด์•„์„œ ์žฌ๋ฐœ๊ธ‰ ํ›„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ

  • CSRF ๊ณต๊ฒฉ์„ ํ•  ๋•Œ ์นจ์ž…์ž๊ฐ€ Refresh Token์„ ์•Œ์•„๋„ ์ƒˆ๋กœ ๋ฐ›์•„์˜จ Access Token์„ ํ™•์ธ ๋ถˆ๊ฐ€

  • XSS ๊ณต๊ฒฉ์„ ํ•  ๋•Œ httpOnly ์˜ต์…˜์„ ํ†ตํ•ด JS๋กœ ์ฟ ํ‚ค์— ์ ‘๊ทผ์„ ๋ง‰์Œ

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