์ด๋ฒ ํฌ์คํ
์ 'Change Secret' ์
๋๋ค.
์ค์ตํ๋ ๋ชจ๋ ๊ณต๊ฒฉ์ ์ค์ ๋ก ์ฌ์ฉํ์๋ฉด ์๋ฉ๋๋ค.
ํ์ฉ๋ฐ์ง ์์ ์๋น์ค ๋์์ ํดํน์ ์๋ํ๋ ํ๋์ ๊ธ์งํ๋ฉฐ,
๋ชจ๋ ๋ฒ์ ์ฑ
์์ ์ฌ์ฉ์์๊ฒ ์๋ ๊ฒ์ ๋ช
์ฌํด์ฃผ์ธ์.
๋์ด๋ ํ
ํ์ด์ง ์ ์!
์ด ํ์ด์ง๋ ๋น๋ฐ๋ฒํธ ํํธ๋ฅผ ์๋ก ์ค์ ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์๋ก์ด ํํธ๋ฅผ ์
๋ ฅ๋์ ๊ฒฝ๊ณ ์ฐฝ์ผ๋ก ์ถ๋ ฅํ๋ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์
๋ ฅํ๋ค.
ex) <script>alert("Hello world~");</script>
์
๋ ฅ ํ change๋ฒํผ์ ํด๋ฆญํ๋ฉด
์ฑ๊ณต์ ์ผ๋ก ํํธ๊ฐ ๋ณ๊ฒฝ๋์๋ค๊ณ ์๋ ค์ค๋ค.
๋น๋ฐ๋ฒํธ ํํธ๋ฅผ ํ์ธํ ์ ์๋ ํ์ด์ง๋ก ์ด๋ํด์, ์
๋ ฅ ํ ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์คํ๋์๋์ง ํ์ธํด๋ณด์.
SQL์ธ์ ์
์ LoginForm ํ์ด์ง์์ ๋ก๊ทธ์ธ ํ๋ฉด ๋น๋ฐ๋ฒํธ ํํธ๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด์ง์ ์ ์ ํ ๋ก๊ทธ์ธ ํ๋ฉด ํํธ๋ฅผ ์ถ๋ ฅํ๋ค.
๋น๋ฐ๋ฒํธ ํํธ๋ฅผ ๋ณ๊ฒฝํ 'bee' ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธ ํด๋ณด์.
ํํธ๋ฅผ ๋ณ๊ฒฝํ ๊ฒ์ฒ๋ผ, ๊ฒฝ๊ณ ์ฐฝ์ด ๋ฌ๋ค.
์ด๋ฒ์๋ ์๋ก์ด ํํธ ์ค์ ์ ํ ๋, ์ฌ์ฉ์์ ์ฟ ํค๊ฐ์ ๊ฒฝ๊ณ ์ฐฝ์ผ๋ก ์ถ๋ ฅํ๋ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์
๋ ฅํด๋ณด์.
<script>alert(document.cookie);</script>
์
๋ ฅ ํ ํ์ธํด๋ณด๋ฉด
sqliํ์ด์ง์์ Your secret์ด๋ผ๋ ํํธ ๋ถ๋ถ์ด ์ถ๋ ฅ๋์ง ์๋์ด์ ๋ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ฃ์๊ธฐ ๋๋ฌธ์,
ํํธ ๋ถ๋ถ์ด ๋ณด์ด์ง ์๋ ๊ฒ์ด๋ค.
๋ง์ฝ hello๋ฅผ ํํธ๋ก ๊ทธ๋ฅ ์ฃผ๊ณ , ํ์ธํด๋ณด๋ฉด bee๋ก ๋ก๊ทธ์ธ ํ์ ๋ hello๋ผ๋ ํํธ๊ฐ ์ถ๋ ฅ๋๋ค.
xss_stored_3.php ํ์ด์ง๋ ์ฌ์ฉ์์ ์์ด๋๋ฅผ ์น ํ์ด์ง ์์ค ์ฝ๋์ ๋
ธ์ถํ๋ค.
hidden ํ์
์ผ๋ก ์ ์๋ login ๋ณ์์ ๋ค๋ฅธ ์ฌ์ฉ์์ ์์ด๋๋ฅผ ์
๋ ฅํ๊ณ ๊ทธ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ ํํธ๋ฅผ ์์ ํ๋ค๋ฉด?
๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์์ ๋ ๋ชจ๋ฅด๊ฒ ์ ๋ณด๊ฐ ์ ์ถ๋ ์ ์๋ ๊ฒ์ด๋ค.(์ฟ ํค ๊ฐ ๋
ธ์ถ๋ฑ..)
์๋ก์ด ๊ณ์ ์ ์ถ๊ฐ ํด๋ณด๊ณ ๊ทธ ์์ด๋๋ฅผ hidden value๋ก ์ค ๋ค์, ๋น๋ฐ ๋ฒํธ ํํธ๋ฅผ ๋ฐ๊ฟ๋ณด๊ฒ ๋ค.
1. ๊ณ์ ์ถ๊ฐํ๊ธฐ
Create user๋ก ์๋ก์ด ๊ณ์ ์์ฑ
์์ฑ์ด ์๋ฃ๋จ.
์ฒดํฌ ํด๋ณด๊ธฐ.
haeun1 ์ ์ํฌ๋ฆฟ ํํธ 123 ๋ชจ๋ ์ ์์ ์ผ๋ก ๋ก๊ทธ์ธ ๋จ.
2. ๋ค๋ฅธ ์ฌ๋ ๊ณ์ ์ผ๋ก pwํํธ ๋ณ๊ฒฝํ๊ธฐ.
๊ณต๊ฒฉ์ ์
์ฅ์์ value๊ฐ์ haeun1๋ก ๋ฐ๊พผ๋ค๋ฉด, haeun1๊ณ์ ์ passwordํํธ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ด๋ค.
๋ณ๊ฒฝ ํ change!
3. ๋ค๋ฅธ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ํด๋ณด๊ธฐ
haeun1๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ํ๋๋, ํํธ๊ฐ ๋ณ๊ฒฝ๋จ.
์ด์ ๊ณผ ๋ค๋ฅด๊ฒ secret๋ถ๋ถ์ด ์ง์์ง (์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์
๋ ฅํ์๊ธฐ ๋๋ฌธ์)
๋์๋ฐฉ์
๋์ด๋ ์์์๋ ๋น๋ฐ๋ฒํธ ํํธ ์
๋ ฅ์นธ์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์
๋ ฅํ์ฌ๋ ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์คํ๋์ง ์๊ณ
๋ฌธ์์ด๋ก ์๋์ฒ๋ผ ์ถ๋ ฅ๋๋ค.
ํ์ด์ง ์์ค๋ฅผ ํ์ธํด๋ณด์๋๋ xss_check_3ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ฐํํ๋ค.
ํจ์ ๋ด๋ถ์๋ htmlspecialchars() ํจ์๋ฅผ ํธ์ถํ์ฌ ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ UTF-8๋ก ์ธ์ฝ๋ฉ ํ๋ค.
๋ด์ฉ์ ์ดํด๋ณด๋ utf-8๋ก ์ธ์ฝ๋ฉ์ ํด์ค๋ค.
๋ฐ์ดํฐ๋ฅผ htmlspecialchars๋ฅผ ํตํด ๋ฐ์ data(์
๋ ฅ๋ฐ์ดํ)๋ฅผ ์ธ์ฝ๋ฉ ํด์ฃผ๋ ํจ์์ธ๋ฐ
http://b.redinfo.co.kr/56
์์ ๊ฐ์ด ํน์๋ฌธ์๋ฅผ html์ํฐํฐ๋ก ๋ณํ์ํจ๋ค.
http://b.redinfo.co.kr/56
๋๋ฒ์งธ ์ธ์๋ ์๋ฅผ ๋ณด๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
ํ์ฌํผ ๋ฌธ์๋ก ์ธ์ํ๊ฒ ๋ฐฉ์ด ํ๋ฉด ๋๋ค!
์ฆ ์คํ๋๋ ์น ๊ณต๊ฐ์ ๋ง๊ธฐ์ํด htmlspecialcharsํจ์๋ฅผ ์ฌ์ฉ
--> pwํํธ๋ db์ ์ ์ฅ๋จ (์ฌ๊ธฐ์ sql injection์ ๋ง์์ผํจ) --> mysqli_real_escape__stringํจ์ ์ฌ์ฉ
์ด๋ ๊ฒ ์ด ํ์ด์ง์์ ๋ณ๊ฒฝํ ๋น๋ฐ๋ฒํธ ํํธ๋ MYSQL ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅ๋๋ฏ๋ก
secret ๋ณ์๋ฅผ ๋ค์ ์ฐํํ๋ค.
mysqli_real_escape_string()ํจ์๋ฅผ ์ด์ฉํ์ฌ, ๊ธฐํธ์ \(๋ฐฑ์ฌ๋์)๋ฅผ ๋ถ์ฌ SQL์ธ์ ์
๊ณต๊ฒฉ์ ๋ฐฉ์ดํ๋ค.
๋ํ htmlspecialchars()ํจ์๋ก HTML์ ์ฌ์ฉ๋๋ ๊ธฐํธ๋ฅผ UTF-8๋ก ๋ฐํํ๊ณ HTML์ฝ๋์ ์ฌ์ฉ๋๋ ๋ฌธ์๋ค์
HTML ์ํฐํฐ ์ฝ๋๋ก ๋ณํํ๋ค.
๊ทธ ๋ค์ MySQL ์
๋ฐ์ดํธ ์
๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ํ ๋ฌธ์๊ฐ ๋ณํ๋ secret๋ณ์๋ฅผ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅํ๋ค.
๋์ด๋ ์์์๋ ๋ค๋ฅธ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ ํํธ๋ฅผ ๋ณ๊ฒฝํ์ง ๋ชปํ๋๋ก ์ ๋ณด๋ฅผ hidden -> value๊ฐ ์๋,
token์ผ๋ก ๋ฐ์ ๋ค๋ฅธ ์ฌ์ฉ์๋ก ์ ๊ทผํ ๊ฐ๋ฅ์ฑ์ ๋ง๋๋ค.