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}"/>
๋ฐ์ํ
์กฐ๊ธ ๋ ๊ณต๋ถ๋ฅผ ํด๋ณผ๊ฒ์.
์ต์ด ์ด์ฉ์๊ฐ ์ผํ๋ชฐ์ ์ธ์ฆ์ ์์ฒญํด์ 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
๋ฐ์ํ
'์ด๋ก ์ ๋ฆฌ > ์ ๋ณด๋ณด์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด๋ก ์ ๋ฆฌ] IDS์ IPS๋? (0) | 2023.02.21 |
---|---|
[์ ๋ณด๋ณด์] JWT(JSON Web Token) ์ด๋? (0) | 2022.04.11 |
[HTTP Network] JWT - JSON Web Token (0) | 2022.01.18 |
[HTTP Network] Session (0) | 2022.01.18 |
[์ ๋ณด๋ณด์] ํด์ํจ์ ๊ฐ๋ (0) | 2021.08.28 |