๐ DOM์ด๋?
Document Object Model์ ์ฝ์๋ก, HTML ๋ฌธ์๋ฅผ ๊ฐ์ฒด๋ก ํํํ ๊ฒ์ ๋๋ค
javascript์ ๊ฐ์ ์ธ์ด๋ DOM ๊ฐ์ฒด๋ฅผ ํตํด์ HTML ๋ฌธ์์ ์ ๊ทผํฉ๋๋ค
HTML์๋ ๋ถ๋ชจ ์์, ์์ ์์๊ฐ ์์ต๋๋ค
์ฆ, ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๊ณ ์๋๋ฐ์, ๊ทธ๋์ DOM์ ํธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๊ณ ์์ต๋๋ค
DOM์ javascript์ ๊ฐ์ ์ธ์ด๊ฐ HTML์ ์ ๊ทผํ ์ ์๋๋ก ๋ง๋ค์ด ์ฃผ๊ธฐ ๋๋ฌธ์,
DOM ๊ฐ์ฒด๋ฅผ ์ด์ฉํด HTML ๋ฌธ์๋ฅผ ์ ์ดํ ์ ์๊ฒ ๋ง๋ค์ด์ค๋๋ค
์ด๊ฒ์ HTML์ ์์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ ํฌํจ์ธ๋ฐ์
DOM ๊ฐ์ฒด๋ฅผ ํ์ฉํด javascript๋ก HTML ๋ฌธ์์ ํ๊ทธ ์ฆ, ์์๋ฅผ ๋ํด์ค ์ ์์ต๋๋ค
๋ํ์ ์ผ๋ก document.write
๋ innerHTML
์ด ์์ต๋๋ค
๋ง์ฝ URL์ ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ๋ฅผ javascript๋ฅผ ์ด์ฉํด HTML์ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ,
ํ๋ผ๋ฏธํฐ์ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์ฝ์ ๋์ด ์์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
์ด ์
๋ ฅ๊ฐ์ด document.write
๋ innerHTML
์ ๊ฐ์ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด HTML ๋ฌธ์์ ์ถ๊ฐ๋์ด ์
์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ๊ฒ ์
๋๋ค
์๋ฅผ ๋ค์ด, www.a.com/hello?p=ํ๋ผ๋ฏธํฐ๊ฐ
๋ผ๋ ์์ฒญ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋์ ๋ hello ํ์ด์ง์์ ํ๋ผ๋ฏธํฐ๋ฅผ document.write(ํ๋ผ๋ฏธํฐ๊ฐ)
๊ณผ ๊ฐ์ด ์ถ๋ ฅํ๊ฒ ๋์ด์๋ค๋ฉด
ํ๋ผ๋ฏธํฐ๊ฐ์ <script> alert(1); </script>
๊ฐ ๋ค์ด๊ฐ์ ๋,
document.write(<script> alert(1); </script>)
๊ฐ HTML์ ์ถ๊ฐ๋์ด alert(1)
์ด ์คํ๋ ๊ฒ์
๋๋ค
DOM based XSS๋ ์ด๋ ๊ฒ ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ ์์ ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ script๋ฅผ ํตํด ์ฌ์กฐํฉ๋์ด HTML์ ์์๋ก ์ถ๊ฐ๋๋ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์์ต๋๋ค