CSRF
๐ฅ CSRF (์ฌ์ดํธ ๊ฐ ์์ฒญ ์์กฐ, Cross-Site Ruquest Forgery)
๊ณต๊ฒฉ์๊ฐ ์ธ์ฆ๋ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋ ์ฟ ํค์ ์ธ์ ์ ๋ณด๋ฅผ ํ์ฉํ์ฌ ์น ์๋ฒ์ ์ฌ์ฉ์๊ฐ ์๋ํ์ง ์์ ์์ฒญ์ ์ ๋ฌํ๋ ๊ฒ
CSRF ์ค์ ์ด ๋์ด์๋ ๊ฒฝ์ฐ html์์ CSRF ํ ํฐ ๊ฐ์ ๋๊ฒจ์ฃผ์ด์ผ ์์ฒญ์ ์์ ๊ฐ๋ฅ
์ฟ ํค ๊ธฐ๋ฐ์ ์ทจ์ฝ์ ์ ์ด์ฉํ ๊ณต๊ฒฉ์ด๊ธฐ ๋๋ฌธ์ REST ๋ฐฉ์์ API์์๋ disable ๊ฐ๋ฅ
POST ์์ฒญ๋ง๋ค ์ฒ๋ฆฌํด์ฃผ๋ ๋์ CSRF protection์ disable
Spring Security - Filter Chain
- Spring ์์ ๋ชจ๋ ํธ์ถ์ DispatcherServlet์ ํต๊ณผํ๊ฒ ๋๊ณ ์ดํ์ ๊ฐ ์์ฒญ์ ๋ด๋นํ๋ Controller๋ก ๋ถ๋ฐฐ
- ์ด ๋, ๊ฐ ์์ฒญ์ ๋ํด์ ๊ณตํต์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ ํ์๊ฐ ์์ ๋, DispatcherServlet ์ด์ ๋จ๊ณ๊ฐ ํ์ํ๋ฉฐ ์ด๊ฒ์ด
Filter
- Spring Security๋ ์ธ์ฆ ๋ฐ ์ธ๊ฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํํฐ๋ฅผ ์ฌ์ฉํ๋๋ฐ, Spring Security๋ FilterChainProxy๋ฅผ ํตํด ์์ธ ๋ก์ง ๊ตฌํ
Form Login ๊ธฐ๋ฐ์ ์ธ์ฆ
- Form Login ๊ธฐ๋ฐ ์ธ์ฆ์ ์ธ์ฆ์ด ํ์ํ URL ์์ฒญ์ด ๋ค์ด์์ ๋ ์ธ์ฆ์ด ๋์ง ์์๋ค๋ฉด ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ๋ฐํํ๋ ํํ
UsernamePasswordAuthenticationFilter
- UsernamePasswordAuthenticationFilter๋ Spring Security์ ํํฐ์ธ AbstractAuthenticationProcessingFilter๋ฅผ ์์ํ ํํฐ
- ๊ธฐ๋ณธ์ ์ผ๋ก Form Login ๊ธฐ๋ฐ์ ์ฌ์ฉํ ๋ username๊ณผ password ํ์ธํ์ฌ ์ธ์ฆ
- ์ธ์ฆ ๊ณผ์
- ์ฌ์ฉ์๊ฐ username๊ณผ password๋ฅผ ์ ์ถํ๋ฉด UsernamePasswordAuthenticationFilter๋ ์ธ์ฆ๋ ์ฌ์ฉ์์ ์ ๋ณด๊ฐ ๋ด๊ธฐ๋ ์ธ์ฆ ๊ฐ์ฒด์ธ Authentication์ ์ข ๋ฅ ์ค ํ๋์ธ UsernamePasswordAuthenticationToken์ ๋ง๋ค์ด AuthenticationManager์๊ฒ ๋๊ฒจ ์ธ์ฆ ์๋
- ์คํจํ๋ฉด SecurityContextHolder๋ฅผ ๋น์
- ์ฑ๊ณตํ๋ฉด SecurityContextHolder์ Authentication ์ธํ
- SecurityCotext
๋ ์ธ์ฆ์ด ์๋ฃ๋ ์ฌ์ฉ์์ ์์ธ์ ๋ณด(Authentication) ์ ์ฅ
- Authentication
- ํ์ฌ ์ธ์ฆ๋ ์ฌ์ฉ์๋ฅผ ๋ํ๋ด๋ฉฐ, SecurityContext
์์ ๊ฐ์ ธ์ฌ ์ ์์
- principal : ์ฌ์ฉ์ ์๋ณ
- Username/Password ๋ฐฉ์์ผ๋ก ์ธ์ฆํ ๋ ์ผ๋ฐ์ ์ผ๋ก UserDetails ์ธ์คํด์ค
- credentials : ์ฃผ๋ก ๋น๋ฐ๋ฒํธ, ๋๋ถ๋ถ ์ฌ์ฉ์ ์ธ์ฆ์ ์ฌ์ฉํ ํ ๋น์
- authorities : ์ฌ์ฉ์์ ๋ถ์ฌํ ๊ถํ์ GrantedAuthority๋ก ์ถ์ํํ์ฌ ์ฌ์ฉ
- UserDetailsService
: username/password ์ธ์ฆ ๋ฐฉ์์ ์ฌ์ฉํ ๋ ์ฌ์ฉ์๋ฅผ ์กฐํํ๊ณ ๊ฒ์ฆํ ํ UserDetails๋ฅผ ๋ฐํ, Customํ์ฌ Bean์ผ๋ก ๋ฑ๋ก ํ ์ฌ์ฉ ๊ฐ๋ฅ
- UserDetails
: ๊ฒ์ฆ๋ UserDetails๋ UsernamePasswordAuthenticationToken ํ์
์ Authentication์ ๋ง๋ค ๋ ์ฌ์ฉ๋๋ฉฐ ํด๋น ์ธ์ฆ ๊ฐ์ฒด๋ SecurityContextHolder์ ์ธํ
๋จ, Customํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
Spring Security ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ ๊ณผ์
Spring Security ์ญํ
- ์ธ์ฆ / ์ธ๊ฐ
- ์ฑ๊ณต ์, ์ปจํธ๋กค๋ฌ๋ก client ์์ฒญ ์ ๋ฌ (client ์์ฒญ + ์ฌ์ฉ์ ์ ๋ณด(UserDetails))
- ์คํจ ์, ์ปจํธ๋กค๋ฌ๋ก client ์์ฒญ ์ ๋ฌํ์ง ์์(client์๊ฒ error response ์ ๋ฌ)
- ์ธ์ฆ / ์ธ๊ฐ
๋ก๊ทธ์ธ ์ฒ๋ฆฌ ๊ณผ์
'๋ด์ผ๋ฐฐ์์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ์๋ จ 4์ฃผ์ฐจ : ์ง์ฐ ๋ก๋ฉ/์ฆ์ ๋ก๋ฉ (0) | 2023.11.29 |
---|---|
[KPT] ๋ด์คํผ๋ ํ๋ก์ ํธ (0) | 2023.11.28 |
์คํ๋ง ์๋ จ 3์ฃผ์ฐจ : ํํฐ (1) | 2023.11.17 |
์คํ๋ง ์๋ จ 3์ฃผ์ฐจ : JWT (0) | 2023.11.17 |
์คํ๋ง ์๋ จ 3์ฃผ์ฐจ : ์ฟ ํค์ ์ธ์ (1) | 2023.11.17 |