CSRF - hyunwoo-e/Spring GitHub Wiki
CSRF(Cross site request forgery, ์ฌ์ดํธ๊ฐ ์์ฒญ ์์กฐ)๋ ์น ์ฌ์ดํธ์ ์ทจ์ฝ์ ์ ์ด์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์๋ํ์ง ์๋ ์์ฒญ์ ์ก์ ํ๋๋ก ํ๋ ๊ณต๊ฒฉ์ ์๋ฏธ.
CSRF๊ณต๊ฒฉ๋ฐฉ๋ฒ์๋ ์ ํํ๋ ์๋ฒ์ด ์๋ค๊ธฐ ๋ณด๋ค๋ ์น์ ์์ฒญ์ ๋ณด๋ผ์ ์๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ด ๊ณต๊ฒฉ๋ฐฉ๋ฒ์ด ๋๋ค๊ณ ํ ์ ์๋ค. javascript์ ajax๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ, ์ ํต์ ์ธ form๋ฐฉ๋ฒ, imgํ๊ทธ๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ ๋ฑ๋ฑ ์์ฒญ์ ๋ณด๋ผ์ ์๋ ๋ฐฉ๋ฒ์ด๋ผ๋ฉด ๊ทธ ์ด๋ค ๊ฒ์ด๋ผ๋ ๊ฐ๋ฅํ๋ค.
CSRF ๊ณต๊ฒฉ์ ์ฌ๋ก์ ๋๋ค
- ์ฌ์ฉ์๊ฐ ํผ ์ธ์ฆ์ ํตํด์ www.example.com์ ๋ก๊ทธ์ธ
- ์๋ฒ๊ฐ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํฉ๋๋ค. ์ด ๋, ์๋ฒ์์ ๋ฐํ๋ ์๋ต์๋ ์ธ์ฆ ์ฟ ํค ํฌํจ
- ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์์ํ์ง ์์ ์ํ์์ ์ ์์ ์ธ ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธ
<h1>You Are a Winner!</h1>
<form action="http://example.com/api/account" method="post">
<input type="hidden" name="Transaction" value="withdraw" />
<input type="hidden" name="Amount" value="1000000" />
<input type="submit" value="Click Me"/>
</form>
- ์ฌ์ฉ์๊ฐ "submit" ๋ฒํผ์ ํด๋ฆญ, ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญ์ ์ธ์ฆ ์ฟ ํค๋ฅผ ํจ๊ป ํฌํจ์์ผ์ ์ ์ก
- ์์ฒญ์ ์๋ฒ์์ ์ฌ์ฉ์์ ์ธ์ฆ ์ปจํ ์คํธ๋ก ์คํ, ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ์ํํ ์ ์๋ ๋ชจ๋ ์์ ์ ์ํํ ์ ์์
์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋๋ฆฌ ์ด์ฉ๋๋ ๋ฐฉ๋ฒ์๋ Synchronizer token pattern(๋๊ธฐํ๋ ํ ํฐ ํจํด)์ด ์๋ค. ์ด ํจํด์ ์๋ฒ ์ฌ์ด๋(์ธ์ ์ค์ฝํ ๋ฑ)์ ๋ณด๊ด๋ ํ ํฐ์ CSRF๋ฐฉ์ด๊ฐ ํ์ํ ์์ฒญ๋ง๋ค ํฌํจ(์์ฒญํ form์ hiddenํ๋๋ฅผ ์ด์ฉํ์ฌ ํ ํฐ์ ์ถ๊ฐ)์์ผ์ ์์ฒญํ๊ณ ์๋ฒ์์ ๋น๊ตํ๋ ๋ฐฉ์์ผ๋ก CSRF๋ฅผ ๋ฐฉ์ดํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ ์ํฅ์ ์ฃผ์ง ์๋ ๋ฐฉ์์ผ๋ก ๋ฐฉ์ดํ ์ ์์ผ๋ฏ๋ก ๋๋ฆฌ ์ฌ์ฉ๋๋ค.
http://reiphiel.tistory.com/entry/cross-site-request-forgery
http://www.egocube.pe.kr/Translation/Content/asp-net-web-api/201402030001