CSRF(Cross Site Request Forgery) ๊ณต๊ฒฉ์ด๋ž€?

2021. 12. 20. 17:40ใ†์ด๋ก  ์ •๋ฆฌ/์ •๋ณด๋ณด์•ˆ

728x90
๋ฐ˜์‘ํ˜•

 

 

Cross site Request forgery๋กœ ์‚ฌ์ด์ฆˆ๊ฐ„ ์œ„์กฐ ์š”์ฒญ์ธ๋ฐ, ์ฆ‰ ์ •์ƒ์ ์ธ ์ด์šฉ์ž๊ฐ€ ์˜๋„์น˜ ์•Š์€ ์œ„์กฐ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์˜ˆ๋ฅผ ๋“ค์–ด A๋ผ๋Š” ๋„๋ฉ”์ธ์—์„œ, ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž H๊ฐ€ ์œ„์กฐ๋œ request๋ฅผ ํฌํ•จํ•œ link, email์„ ์‚ฌ์šฉํ•˜์˜€์„ ๊ฒฝ์šฐ(ํด๋ฆญ, ๋˜๋Š” ์‚ฌ์ดํŠธ ๋ฐฉ๋ฌธ๋งŒ์œผ๋กœ๋„), A ๋„๋ฉ”์ธ์—์„œ๋Š” ์ด ์ด์šฉ์ž๊ฐ€ ์ผ๋ฐ˜ ์œ ์ €์ธ์ง€, ์•…์šฉ๋œ ๊ณต๊ฒฉ์ธ์ง€ ๊ตฌ๋ถ„ํ•  ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒƒ์ด์—์š”.

 

 

CSRF protection์€ Spring Security์—์„œ default๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, protection์„ ํ†ตํ•ด GET์š”์ฒญ์„ ์ œ์™ธํ•œ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” POST, PUT, DELETE ์š”์ฒญ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

csrf protection์„ ์ ์šฉํ•˜์˜€์„ ๋•Œ, html์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ csrf ํ† ํฐ์ด ํฌํ•จ๋˜์–ด์•ผ ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๊ฒŒ ๋จ์œผ๋กœ์จ, ์œ„์กฐ ์š”์ฒญ์„ ๋ฐฉ์ง€ํ•˜๊ฒŒ ๋œ๋‹ต๋‹ˆ๋‹ค.

 

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
๋ฐ˜์‘ํ˜•

 

์กฐ๊ธˆ ๋” ๊ณต๋ถ€๋ฅผ ํ•ด๋ณผ๊ฒŒ์š”. 

์ถœ์ฒ˜ : ์ธํ”„๋Ÿฐ - Spring Boot ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” Spring Security ๊ฐ•์˜


์ตœ์ดˆ ์ด์šฉ์ž๊ฐ€ ์‡ผํ•‘๋ชฐ์— ์ธ์ฆ์„ ์š”์ฒญํ•ด์„œ Session Cookie๋ฅผ ๋ฐœ๊ธ‰ ๋ฉ๋‹ˆ๋‹ค.
์ด์šฉ์ž๋Š” ์ด ๋•Œ๋ถ€ํ„ฐ ์ธ์ฆ์ด ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์ด ๋•Œ, ๊ณต๊ฒฉ์ž๊ฐ€ Email ๋“ฑ์„ ํ†ตํ•ด ์•…์„ฑ URL์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ์ด์šฉ์ž๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ๋ณด๋‚ด ์ค€ URL์„ Clickํ•˜์—ฌ ๊ณต๊ฒฉ์ž๊ฐ€ ๋งŒ๋“  Web Site์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.


ํ•ด๋‹น Page์—๋Š” Image๊ฐ€ ์žˆ๋Š”๋ฐ,  ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์–ป๊ธฐ ์œ„ํ•ด ๊ณต๊ฒฉ์šฉ URL๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทผ๋ฐ ํ•ด๋‹น URL ๋’ค URI ๋ถ€์— [/address=๊ณต๊ฒฉ์ž๊ฐ€ ์›ํ•˜๋Š” ํ–‰๋™]๋ฅผ ํ†ตํ•ด ๊ณต๊ฒฉ์ž์˜ ์•…์„ฑ Web URL์„ ์ „๋‹ฌํ•˜๊ฒŒ ์„ค์ •์ด ๋˜์–ด ์žˆ์–ด์š”.

ํ˜„์žฌ ์ƒํ™ฉ์€ ์ด์šฉ์ž๊ฐ€ ํ•œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์‡ผํ•‘๋ชฐ์— ์ ‘์†์ด ๋˜์–ด ์žˆ๊ณ , ์ด์šฉ์ž ๋ธŒ๋ผ์šฐ์ €์—๋Š” ์‡ผํ•‘๋ชฐ์ด ๋ฐœ๊ธ‰ํ•œ Session Cookie๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์š”. ๊ทธ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ณต๊ฒฉ์ž์˜ Link๋ฅผ Clickํ•˜์—ฌ Image ํŒŒ์ผ์„ ๋ฐ›์•„ ์˜ค๊ธฐ ์œ„ํ•ด ์‡ผํ•‘๋ชฐ URL ๋’ค์— [/address=๊ณต๊ฒฉ์ž๊ฐ€ ์›ํ•˜๋Š” ํ–‰๋™]๊ฐ€ ์ ํžŒ URL๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜์–ด ์žˆ๋Š” ์ƒํ™ฉ์ด์—์š”. ์ฆ‰, ์‡ผํ•‘๋ชฐ์—์„œ ๋ฐœ๊ธ‰ ๋ฐ›์€ Session Cookie๋ฅผ ๊ฐ€์ง€๊ณ , ๋‹ค์‹œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์‡ผํ•‘๋ชฐ์€ ํ•ด๋‹น ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด Session Cookie๋ฅผ ํ™•์ธํ•˜๊ฒŒ ๋˜๊ณ , ์ •์ƒ์ ์ด๋ผ๋Š” ์š”์ฒญ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜๊ฒŒ ๋˜์–ด ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‘๋‹ต์„ ํ•ด์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.




 





728x90
๋ฐ˜์‘ํ˜•