์ „์ฒด ๊ธ€

CSRF ๐Ÿ”ฅ CSRF (์‚ฌ์ดํŠธ ๊ฐ„ ์š”์ฒญ ์œ„์กฐ, Cross-Site Ruquest Forgery) ๊ณต๊ฒฉ์ž๊ฐ€ ์ธ์ฆ๋œ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋œ ์ฟ ํ‚ค์˜ ์„ธ์…˜ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์›น ์„œ๋ฒ„์— ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š์€ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ CSRF ์„ค์ •์ด ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ html์—์„œ CSRF ํ† ํฐ ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ์š”์ฒญ์„ ์ˆ˜์‹  ๊ฐ€๋Šฅ ์ฟ ํ‚ค ๊ธฐ๋ฐ˜์˜ ์ทจ์•ฝ์ ์„ ์ด์šฉํ•œ ๊ณต๊ฒฉ์ด๊ธฐ ๋•Œ๋ฌธ์— REST ๋ฐฉ์‹์˜ API์—์„œ๋Š” disable ๊ฐ€๋Šฅ POST ์š”์ฒญ๋งˆ๋‹ค ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋Œ€์‹  CSRF protection์„ disable Spring Security - Filter Chain Spring ์—์„œ ๋ชจ๋“  ํ˜ธ์ถœ์€ DispatcherServlet์„ ํ†ต๊ณผํ•˜๊ฒŒ ๋˜๊ณ  ์ดํ›„์— ๊ฐ ์š”์ฒญ์„ ๋‹ด๋‹นํ•˜๋Š” Controller๋กœ ๋ถ„๋ฐฐ ์ด ๋•Œ, ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ ๊ณตํ†ต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ• ..
ํ•„ํ„ฐ Filter๋ž€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ์˜์—ญ์œผ๋กœ Client๋กœ๋ถ€ํ„ฐ ์˜ค๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•ด ์ตœ์ดˆ/์ตœ์ข… ๋‹จ๊ณ„์˜ ์œ„์น˜์ด๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ ์ฃผ๋กœ ๋ฒ”์šฉ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…๋“ค, ์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๊น… ๋ฐ ๋ณด์•ˆ ์ฒ˜๋ฆฌ์— ํ™œ์šฉ ๋˜ํ•œ ์ธ์ฆ, ์ธ๊ฐ€๊ฐ€ ๊ด€๋ จ๋œ ๋กœ์ง๋“ค์„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ Filter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์ฆ, ์ธ๊ฐ€์™€ ๊ด€๋ จ๋œ ๋กœ์ง์„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์  ์กด์žฌ Filter Chain ํ•„ํ„ฐ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ Chain ํ˜•์‹์œผ๋กœ ๋ฌถ์—ฌ์„œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ ํ•„ํ„ฐ ์ ์šฉ ์š”์ฒญ URL์˜ ์ธ๊ฐ€ ์ฒ˜๋ฆฌ ๋ฐ ์ธ์ฆ ์ฒ˜๋ฆฌ ์ง„ํ–‰ํ•˜๋Š” ํ•„ํ„ฐ ๊ตฌํ˜„ ์ถ”๊ฐ€๋กœ ์š”์ฒญ URL์„ ๋กœ๊น…ํ•ด์ฃผ๋Š” ํ•„ํ„ฐ ๊ตฌํ˜„ Request URL Logging @Slf4j(topic = "LoggingFilter") @..
JWT Json Web Token ์ด๋ž€, JSON ํฌ๋งท์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์†์„ฑ์„ ์ €์žฅํ•˜๋Š” clain ๊ธฐ๋ฐ˜์˜ Web Token ์ฆ‰, ํ† ํฐ์˜ ํ•œ ์ข…๋ฅ˜ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฟ ํ‚ค ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JWT ์ €์žฅ ์‚ฌ์šฉ ์ด์œ  ์„œ๋ฒ„๊ฐ€ 1๋Œ€์ธ ๊ฒฝ์šฐ Session1์ด ๋ชจ๋“  client์˜ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์†Œ์œ  ์„œ๋ฒ„๊ฐ€ 2๋Œ€ ์ด์ƒ์ธ ๊ฒฝ์šฐ ์„œ๋ฒ„์˜ ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์„œ๋ฒ„ 2๋Œ€ ์ด์ƒ ์šด์˜์ด ํ•„์š” Session ๋งˆ๋‹ค ๋‹ค๋ฅธ Client ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์Œ ๋งŒ์•ฝ Client1์˜ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ Server2 ๋‚˜ Server3์— API ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋˜๋ฉด? ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 1) Sticky Session : Client ๋งˆ๋‹ค ์š”์ฒญ Server ๊ณ ์ • 2) ์„ธ์…˜ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ชจ๋“  ์„ธ์…˜ ์ €์žฅ ์„ธ์…˜ ์ €์žฅ์†Œ ์ƒ..
์ฟ ํ‚ค์™€ ์„ธ์…˜ ์ฟ ํ‚ค์™€ ์„ธ์…˜ ๋ชจ๋‘ HTTP ์— ์ƒํƒœ ์ •๋ณด๋ฅผ ์œ ์ง€(Stateful)ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ ์ฆ‰, ์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ํ†ตํ•ด ์„œ๋ฒ„์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ๋ณ„๋กœ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€ ๊ฐ€๋Šฅ ์ฟ ํ‚ค ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋  ๋ชฉ์ ์œผ๋กœ ์ƒ์„ฑํ•œ ์ž‘์€ ์ •๋ณด๋ฅผ ๋‹ด์€ ํŒŒ์ผ ๋„๋ฉ”์ธ ๋ณ„๋กœ ์ €์žฅ๋˜์–ด ์žˆ์Œ ๊ตฌ์„ฑ์š”์†Œ Name : ์ฟ ํ‚ค๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ‚ค(์ค‘๋ณตx) Value : ์ฟ ํ‚ค์˜ ๊ฐ’ Domain : ์ฟ ํ‚ค๊ฐ€ ์ €์žฅ๋œ ๋„๋ฉ”์ธ Path : ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ๋กœ Expires : ๋งŒ๋ฃŒ๊ธฐํ•œ ์„ธ์…˜ ์„œ๋ฒ„์—์„œ ์ผ์ •์‹œ๊ฐ„ ๋™์•ˆ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ ๋ณ„๋กœ ์œ ์ผํ•œ '์„ธ์…˜ID'๋ฅผ ๋ถ€์—ฌํ•œ ํ›„ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ €์žฅ '์„ธ์…˜ID'๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ฟ ํ‚ค๊ฐ’์œผ๋กœ ์ €์žฅ๋˜์–ด ํด๋ผ์ด์–ธํŠธ ์‹๋ณ„์— ์‚ฌ์šฉ๋จ ๋™์ž‘ ๋ฐฉ์‹ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„..
์–ด์ œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€์ง€๋ชปํ–ˆ๋‹ค... ํ•˜๋ฃจ์— 2๋ฌธ์ œ ํ‘ธ๋Š”๊ฒŒ ๊ณ„ํš์ธ๋ฐใ… ใ… ใ… ใ… ใ…  ๊ทธ๋ž˜์„œ ์˜ค๋Š˜์€ 4๋ฌธ์ œ!!! ํ’€์–ด๋”ฐ~! ์š”์ฆ˜ ๋ฌผ์ฃผ๊ธฐ ์‹œํŠธ์ง€ ๋ณด๋Š” ์žฌ๋ฏธ์— ํ‘น~ ๊ฝค๋‚˜ ์„ฑ์ทจ๊ฐ์ด ๋Š๊ปด์ง€๋Š” ๋ฐฉ์‹!!!! ๊ทธ๋ฆฌ๊ณ  ์˜ค๋Š˜๋„ ๋ฉด์ ‘ ์ค€๋น„๊ฐ€ ๊ฑฐ์˜ ๋‹ค ์ฐจ์ง€...ใ…  ๊ฒฐ๊ตญ ์–ด์ œ ๋‹ค์ง ์˜ค๋Š˜ ๋ชป์ง€ํ‚ด ์–ด์ œ ํ•œ ๋‹ค์ง ์˜ค๋Š˜๋„ ! ๋‚ด์ผ์€ ์ „๋ถ€ ๋‹ค ํ•˜์ž ๋„ˆ๋ฌด ํ•˜๋‚˜์—๋งŒ ๋ชฐ๋‘ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์ง€ ์•Š๋‹ค
์˜ค๋Š˜์€ 9์‹œ๊นŒ์ง€ ์ผ์–ด๋‚˜๊ธฐ ์‹คํŒจํ–ˆ๋‹ค... ์–ด์ œ, ์˜ค๋Š˜ ๋‹ค ๋งค๋‹ˆ์ €๋‹˜๊ป˜ ์ „ํ™”๋ฐ›์•˜๋”ฐ... ๐Ÿ˜ด Spring security, JWT๋ฅผ ์ด์šฉํ•œ ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ, Validation ์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์งœ๊ณ , ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•จ์— ์žˆ์–ด์„œ ํฐ ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ, ์•„์ง ์ด๋ก ์— ์•ฝํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋” ๋Š๊ผˆ๋‹ค.... ๋‚ด์ผ 1์ฃผ์ฐจ ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ํ•œ ๋ฒˆ๋” ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ํ›„์— ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•ด์•ผ๊ฒ ๋‹น..... ์‚ฌ์‹ค ์š”์ฆ˜ ๋ฉด์ ‘ ์ค€๋น„๋ฅผ ํ•˜๋Š”๋ผ ๋„ˆ๋ฌด ์ •์‹ ์ด ์—†๋‹ค..... ๊ทธ๋ž˜์„œ ๋ญ”๊ฐ€ ๋‚ด๋ฐฐ์บ ์— ๋„ˆ๋ฌด ์‹ ๊ฒฝ์„ ๋ชป์“ด ๋Š๋‚Œ ์ด๋ž˜์„œ๋Š” ์•ˆ๋œ๋‹ค. ๋‹ค์‹œ ์ดˆ์‹ฌ์„ ์ฐพ๊ณ ,!!!!!!!!!!! ์‹œ๊ฐ„์„ ์ •ํ™•ํžˆ ์ •ํ•˜๊ณ ! ๋”ด ์ง“ํ•˜์ง€ ์•Š๊ณ ! ๊ณ„ํš ๋นก! ์„ธ์›Œ์„œ ๋‘ ๋งˆ๋ฆฌ, ์„ธ ๋งˆ๋ฆฌ ํ† ๋ผ ๋‹ค ๋จน๋Š”๋‹ค!!!๐Ÿฐ๐Ÿฐ๐Ÿฐ๐Ÿฐ๐Ÿฐ๐Ÿฐ๐Ÿฐ๐Ÿฐ๐Ÿฐ
์Šคํ”„๋ง ์ˆ™๋ จ ์ฃผ์ฐจ ๊ฐ•์˜ ์‹œ์ž‘! ๋นˆ ์ˆ˜๋™ ๋“ฑ๋ก ๋ฐฉ๋ฒ•, ๋™์ผํ•œ ํƒ€์ž…์˜ ๋นˆ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ, ์ธ์ฆ๊ณผ ์ธ๊ฐ€๋ž€์— ๋Œ€ํ•ด ๊ฐ•์˜๋ฅผ ๋“ค์—ˆ๋‹ค. ๊ฑฐ์˜ ๋นˆ์„ @Component ์• ๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด์„œ ์ž๋™ ์Šค์บ”์„ ํ†ตํ•ด ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— , ์ˆ˜๋™์œผ๋กœ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‹ค์Šต์„ ํ•ด๋ณธ ๊ฒƒ์€ ๊ฑฐ์˜ ์ฒ˜์Œ์ด์—ˆ๋‹ค 'ํŽธํ•œ ์ž๋™ ๋“ฑ๋ก์ด ์žˆ๋Š”๋ฐ ์™œ ์ˆ˜๋™์„ ์‚ฌ์šฉํ•˜์ง€..?' ํ–ˆ๋Š”๋ฐ ๊ณตํ†ต ๋กœ์ง์ด๋‚˜ ์—๋Ÿฌ ์‹œ ์ฐพ๊ธฐ ์‰ฝ๋„๋ก ์ˆ˜๋™ ๋“ฑ๋ก์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋™์ผํ•œ ํƒ€์ž…์˜ ๋นˆ์— ๋Œ€ํ•ด ๋งŒ๋“ค์–ด ๋ณธ์ ์ด ์—†์–ด์„œ, @Qualifier, @Primary ์— ๋Œ€ํ•ด์„œ๋Š” ๋ชฐ๋ž๋Š”๋ฐ @Qualifier("name")๋Š” ์ด๋ฆ„ ์„ค์ •, @Primary๋Š” ์šฐ์„ ๊ถŒ ๋ถ€์—ฌ ์ธ ๊ฒƒ์œผ๋กœ ์ดํ•ดํ–ˆ๋‹ค! ์ธ์ฆ๊ณผ ์ธ๊ฐ€์˜ ์ฐจ์ด์ ์ด ๊ต‰์žฅํžˆ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ, ์ธ์ฆ์€ ๋กœ๊ทธ์ธ! ์ธ๊ฐ€๋Š” ํšŒ์›/..
์ธ์ฆ๊ณผ ์ธ๊ฐ€ ์ธ์ฆ(Authentication) ํ•ด๋‹น ์œ ์ €๊ฐ€ ์‹ค์ œ ์œ ์ €์ธ์ง€ ์ธ์ฆ(ํ™•์ธ) ๊ฐœ๋… ex. ์Šค๋งˆํŠธํฐ ์ง€๋ฌธ์ธ์‹, ๋กœ๊ทธ์ธ ๋“ฑ ์ธ๊ฐ€(Authorization) ํ•ด๋‹น ์œ ์ €๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ—ˆ๊ฐ€ ํ™•์ธ ๊ฐœ๋… ex. ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ - ๊ด€๋ฆฌ์ž ๊ถŒํ™˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…” ์ธ์ฆ์˜ ํŠน์ˆ˜์„ฑ ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„ - ํด๋ผ์ด์–ธํŠธ ๊ตฌ์กฐ, ๋ฌผ๋ฆฌ์  ๊ฑฐ๋ฆฌ ์กด์žฌ HTTP ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜์—ฌ ํ†ต์‹  -> ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless) ๋ฌด์ƒํƒœ(Stateless)๐Ÿ‘‰ ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless) : ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธ ์ฑ„ํŒ…์ด๋‚˜ ๊ฒŒ์ž„๊ฐ™์€ ๊ฒƒ์„ ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋Š” ์‹ค์ œ๋กœ ์—ฐ๊ฒฐ โŽ -> ๋ฆฌ์†Œ์Šค ์ ˆ์•ฝ์„ ์œ„ํ•ด ์„œ๋ฒ„๋Š” ํ•˜๋‚˜์˜ ์š”์ฒญ์— ํ•˜๋‚˜์˜ ์‘๋‹ต์„ ์ฃผ๊ณ  ์—ฐ๊ฒฐ ๋Š์Œ ๐Ÿ‘‰ ๋ฌด์ƒํƒœ(Stateless)..
KIMHYEYUN
๐Ÿ’