์ฝ XNUMX๋
์ ์ DataLine์ด ์ถ์๋์์ต๋๋ค.
์๋ ๊ธฐ์ฌ์์๋ ๋ค์ํ ์์ค์ ์ค์๋ ๋ค์ ์จ์ด ์๋ ์น์ฌ์ดํธ ๋ณด์์ ํ์ ์ ์ ํํ ๋ณด์ฌ ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ค์บ๋๊ฐ ํนํ ์์ฃผ ๋ฐ๊ฒฌํ ์ทจ์ฝ์ ์ ๋ฌด์์ธ์ง, ์ ๋ฐ์ํ ์ ์๋์ง, ์์ ์ ๋ณดํธํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ์ง ์์๋ณด๊ฒ ์ต๋๋ค.
Qualys๋ ๋ชจ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ทจ์ฝ์ฑ์ ๋ฎ์, ์ค๊ฐ, ๋์์ ์ธ ๊ฐ์ง ์ค์๋ ์์ค์ผ๋ก ๋๋๋๋ค. '์ฌ๊ฐ๋'๋ณ ๋ถํฌ๋ฅผ ๋ณด๋ฉด ๋ชจ๋ ๊ฒ์ด ๋์์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฌ๊ฐ๋๊ฐ ๋์ ์ทจ์ฝ์ ์ ๊ฑฐ์ ์์ผ๋ฉฐ ๋๋ถ๋ถ ์ฌ๊ฐํ์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋นํ์ ์ด์ง ์๋ค๊ณ ํด์ ๋ฌดํดํ๋ค๋ ๋ป์ ์๋๋๋ค. ๋ํ ์ฌ๊ฐํ ์์์ ์ด๋ํ ์๋ ์์ต๋๋ค.
์ฃผ์ "์ค์ํ์ง ์์" ์ทจ์ฝ์
- ํผํฉ ์ฝํ
์ธ ์ทจ์ฝ์ .
์น์ฌ์ดํธ ๋ณด์์ ํ์ค์ ์ํธํ๋ฅผ ์ง์ํ๊ณ ์ ๋ณด๊ฐ ๊ฐ๋ก์ฑ์ง ์๋๋ก ๋ณดํธํ๋ HTTPS ํ๋กํ ์ฝ์ ํตํด ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๊ฒ์ ๋๋ค.
์ผ๋ถ ์ฌ์ดํธ์์ ์ฌ์ฉ ํผํฉ ์ฝํ ์ธ : ์ผ๋ถ ๋ฐ์ดํฐ๋ ์์ ํ์ง ์์ HTTP ํ๋กํ ์ฝ์ ํตํด ์ ์ก๋ฉ๋๋ค. ๊ฐ์ฅ ์์ฃผ ์ ๋ฌ๋๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์๋์ ์ฝํ ์ธ โ ์ฌ์ดํธ ํ์์๋ง ์ํฅ์ ๋ฏธ์น๋ ์ ๋ณด: ์ฌ์ง, CSS ์คํ์ผ. ํ์ง๋ง ๊ฐ๋ ์ด๋ฐ ์์ผ๋ก ์ ๋ฌ๋๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ํ์ฑ ์ฝํ ์ธ : ์ฌ์ดํธ์ ๋์์ ์ ์ดํ๋ โโ์คํฌ๋ฆฝํธ์ ๋๋ค. ์ด ๊ฒฝ์ฐ ํน์ ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฒ์์ ๋ค์ด์ค๋ ํ์ฑ ์ฝํ ์ธ ๊ฐ ํฌํจ๋ ์ ๋ณด๋ฅผ ๋ถ์ํ๊ณ ์๋ต์ ์ฆ์ ์์ ํ๋ฉฐ ์ ์์๊ฐ ์๋ํ์ง ์์ ๋ฐฉ์์ผ๋ก ๊ธฐ๊ณ๊ฐ ์๋ํ๋๋ก ํ ์ ์์ต๋๋ค.
์ต์ ๋ฒ์ ์ ๋ธ๋ผ์ฐ์ ์์๋ ํผํฉ ์ฝํ ์ธ ๊ฐ ํฌํจ๋ ์ฌ์ดํธ๊ฐ ์์ ํ์ง ์๋ค๋ ๊ฒ์ ์ฌ์ฉ์์๊ฒ ๊ฒฝ๊ณ ํ๊ณ ํด๋น ์ฝํ ์ธ ๋ฅผ ์ฐจ๋จํฉ๋๋ค. ์น์ฌ์ดํธ ๊ฐ๋ฐ์๋ ์ฝ์์์๋ ๋ธ๋ผ์ฐ์ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
ํ์ด์ด ํญ์ค :
์ ์ํํฉ๋๊น?: ๊ณต๊ฒฉ์๋ ์์ ํ์ง ์์ ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ๋ก์ฑ๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ๊ต์ฒดํ๋ฉฐ ์ฌ์ฉ์๋ฅผ ๋์ ํ์ฌ ์ฌ์ดํธ์ ์์ฒญ์ ๋ณด๋ ๋๋ค. ์ฌ์ดํธ ๋ฐฉ๋ฌธ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ์ง ์์๋๋ผ๋ ๋ค์์ผ๋ก๋ถํฐ ๋ณดํธ๋์ง๋ ์์ต๋๋ค. ํผ์ฑ โ ์ฌ๊ธฐ์ ์ธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฐ ์ ๋ณด๋ฅผ ์ป๋ ๊ฒฝ์ฐ. ์๋ฅผ ๋ค์ด, ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์์๊ฒ ์น์ํ ์ฌ์ดํธ๋ก ๊ฐ์ฅํ๋ ์์ ํ์ง ์์ ์ฌ์ดํธ๋ก ์ฌ์ฉ์๋ฅผ ๋ฆฌ๋๋ ์ ํ ์ ์์ต๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ์ ์ฑ ์ฌ์ดํธ๊ฐ ์๋ณธ๋ณด๋ค ํจ์ฌ ์ข์ ๋ณด์ด๊ณ ์ฌ์ฉ์๊ฐ ์ง์ ์์์ ์์ฑํ๊ณ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ ์๋ ์์ต๋๋ค.์น ๊ฐ๋ฐ์๊ฐ ๊ธฐ์ตํด์ผ ํ ๊ฒ: ์ฌ์ดํธ ๊ด๋ฆฌ์๊ฐ SSL/TLS ์ธ์ฆ์๋ฅผ ์ค์น ๋ฐ ๊ตฌ์ฑํ ๊ฒฝ์ฐ๋ผ๋ ์ธ์ ์ค๋ฅ๋ก ์ธํด ์ทจ์ฝ์ ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ์ด์ง ์ค ํ๋์ ์๋ ๋งํฌ๊ฐ ์๋ http์ ์ ๋ ๋งํฌ๋ฅผ ์ถ๊ฐํ๊ณ http์์ https๋ก์ ๋ฆฌ๋๋ ์ ์ ์ค์ ํ์ง ์์ ๊ฒฝ์ฐ์ ๋๋ค.
๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ดํธ์ ํผํฉ ์ฝํ ์ธ ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค. ํ์ด์ง์ ์์ค ์ฝ๋๋ฅผ ๊ฒ์ํ๊ณ ๊ฐ๋ฐ์ ์ฝ์์์ ์๋ฆผ์ ์ฝ์ด๋ณด์ธ์. ๊ทธ๋ฌ๋ ๊ฐ๋ฐ์๋ ์ค๋ซ๋์ ์ง๋ฃจํ๊ฒ ์ฝ๋๋ฅผ ์์ ํด์ผ ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์๋ํ๋ ๋ถ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ธ์ค ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
SSL ํ์ธ , ๋ฌด๋ฃ Lighthouse ์ํํธ์จ์ด ๋๋ ์ ๋ฃ ์ํํธ์จ์ด Screaming Frog SEO Spider.๋ํ, ์์๋ ์ฝ๋์ธ ๋ ๊ฑฐ์ ์ฝ๋์ ๋ฌธ์ ๋ก ์ธํด ์ทจ์ฝ์ ์ด ๋ฐ์ํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ผ๋ถ ํ์ด์ง๊ฐ https๋ก์ ์ฌ์ดํธ ์ ํ์ ๊ณ ๋ คํ์ง ์๋ ์ด์ ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ์์ฑ๋ ๊ฒฝ์ฐ์ ๋๋ค.
- "HTTPOnly" ๋ฐ "๋ณด์" ํ๋๊ทธ๊ฐ ์๋ ์ฟ ํค์
๋๋ค.
"HTTPOnly" ์์ฑ์ ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํ์น๊ธฐ ์ํด ์ฌ์ฉํ๋ ์คํฌ๋ฆฝํธ์ ์ํด ์ฟ ํค๊ฐ ์ฒ๋ฆฌ๋์ง ์๋๋ก ๋ณดํธํฉ๋๋ค. "secure" ํ๋๊ทธ๋ ์ฟ ํค๊ฐ ์ผ๋ฐ ํ ์คํธ๋ก ์ ์ก๋๋ ๊ฒ์ ํ์ฉํ์ง ์์ต๋๋ค. ๋ณด์ HTTPS ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ฟ ํค๋ฅผ ๋ณด๋ด๋ ๊ฒฝ์ฐ์๋ง ํต์ ์ด ํ์ฉ๋ฉ๋๋ค.
๋ ์์ฑ ๋ชจ๋ ์ฟ ํค ์์ฑ์ ์ง์ ๋ฉ๋๋ค.
Set-Cookie: Secure; HttpOnly
์ ์ํํฉ๋๊น?: ์ฌ์ดํธ ๊ฐ๋ฐ์๊ฐ ์ด๋ฌํ ์์ฑ์ ์ง์ ํ์ง ์์ผ๋ฉด ๊ณต๊ฒฉ์๊ฐ ์ฟ ํค์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ๋ก์ฑ์ ์ ์ฉํ ์ ์์ต๋๋ค. ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ์ ์ฟ ํค๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ ์ฌ์ฉ์ ์ธ์ ์ ๊ฐ๋ก์ฑ๊ณ ์ฌ์ฉ์๋ฅผ ๋์ ํ์ฌ ์ฌ์ดํธ์์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์น ๊ฐ๋ฐ์๊ฐ ๊ธฐ์ตํด์ผ ํ ๊ฒ: ์ผ๋ฐ์ ์ผ๋ก ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ์์๋ ์ด๋ฌํ ์์ฑ์ด ์๋์ผ๋ก ์ค์ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ ํ ์น ์๋ฒ ๊ตฌ์ฑ์ ํ์ธํ๊ณ ํ๋๊ทธ๋ฅผ ์ค์ ํ์ญ์์ค: Set-Cookie HttpOnly; ์์ ํ.
์ด ๊ฒฝ์ฐ "HTTPOnly" ์์ฑ์ ์ฟ ํค๋ฅผ ๊ทํ์ JavaScript์ ๋ณด์ด์ง ์๊ฒ ๋ง๋ญ๋๋ค.
- ๊ฒฝ๋ก ๊ธฐ๋ฐ ์ทจ์ฝ์ .
์ค์บ๋๋ ์ ์ฌ์ ์ผ๋ก ๊ธฐ๋ฐ ์ ๋ณด๊ฐ ํฌํจ๋ ๊ณต๊ฐ์ ์ผ๋ก ์ก์ธ์ค ๊ฐ๋ฅํ ํ์ผ์ด๋ ์น ์ฌ์ดํธ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ฐ๊ฒฌํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ์ทจ์ฝ์ ์ ๋ณด๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๊ฐ๋ณ ์์คํ ๊ตฌ์ฑ ํ์ผ์ด๋ ์ ์ฒด ํ์ผ ์์คํ ์ ๋ํ ์ก์ธ์ค๋ฅผ ํ์งํฉ๋๋ค. ์ด๋ฌํ ์ํฉ์ ์ฌ์ดํธ์ ๋ํ ์ ๊ทผ ๊ถํ์ด ์๋ชป ์ค์ ๋์ด ์๋ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ ์ํํฉ๋๊น?: ํ์ผ ์์คํ ์ด "๋์ถ"๋๋ฉด ๊ณต๊ฒฉ์๋ ์ด์ ์ฒด์ ์ธํฐํ์ด์ค์ ๋น ์ ธ ๋น๋ฐ๋ฒํธ๊ฐ ์ผ๋ฐ ํ ์คํธ๋ก ์ ์ฅ๋ ํด๋๋ฅผ ์ฐพ์ผ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค(๊ทธ๋ฌ์ง ๋ง์ธ์!). ๋๋ ๋น๋ฐ๋ฒํธ ํด์๋ฅผ ํ์น๊ณ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฌด์ฐจ๋ณ ๋์ ํ์ฌ ์์คํ ์์ ๊ถํ์ ๋์ด๊ณ ์ธํ๋ผ๋ก ๋ ๊น์ด ๋ค์ด๊ฐ๋ ค๊ณ ์๋ํ ์๋ ์์ต๋๋ค.
์น ๊ฐ๋ฐ์๊ฐ ๊ธฐ์ตํด์ผ ํ ๊ฒ: ์ ๊ทผ๊ถํ์ ์์ง ๋ง๊ณ ํ๋ซํผ, ์น ์๋ฒ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ์ฌ ์น ๋๋ ํฐ๋ฆฌ๋ฅผ "ํ์ถ"ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋๋ก ์ค์ ํ์ธ์.
- ์๋ ์ฑ์ฐ๊ธฐ๊ฐ ํ์ฑํ๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ๊ธฐ ์ํ ์์์
๋๋ค.
์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ์์ ์์์ ์์ฃผ ์์ฑํ๋ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ๋ ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ด ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.
์น์ฌ์ดํธ์ ์์์๋ ๋น๋ฐ๋ฒํธ๋ ์ ์ฉ์นด๋ ๋ฒํธ์ ๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํจ๋ ํ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ํ๋์ ๊ฒฝ์ฐ ์ฌ์ดํธ ์์ฒด์์ ์์ ์๋ ์์ฑ ๊ธฐ๋ฅ์ ๋นํ์ฑํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ ์ํํฉ๋๊น?: ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฒฝ์ฐ ๋์ค์ ๊ณต๊ฒฉ์๊ฐ ํผ์ฑ ๋ฑ์ ํตํด ํด๋น ์ ๋ณด๋ฅผ ๊ฐ๋ก์ฑ ์ ์์ต๋๋ค. ๋ณธ์ง์ ์ผ๋ก ์ด๋ฌํ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์์ด๋ฒ๋ฆฐ ์น ๊ฐ๋ฐ์๋ ์ฌ์ฉ์๋ฅผ ์ค์ ํ๊ณ ์์ต๋๋ค.
์น ๊ฐ๋ฐ์๊ฐ ๊ธฐ์ตํด์ผ ํ ๊ฒ: ์ด ๊ฒฝ์ฐ์๋ ํธ์์ฑ๊ณผ ๋ณด์์ด๋ผ๋ ๊ณ ์ ์ ์ธ ๊ฐ๋ฑ์ด ๋ฐ์ํฉ๋๋ค. ์น ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ณ ๋ คํ๋ค๋ฉด ์์์ ์ผ๋ก ์๋ ์์ฑ์ ์ ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ๋ผ์ผ ํ ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ
์น ์ปจํ ์ธ ์ ๊ทผ์ฑ ์ง์นจ โ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ฅผ ์ํ ์ฝํ ์ธ ์ ๊ทผ์ฑ์ ๋ํ ๊ถ์ฅ ์ฌํญ.๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์์๋ autocompete="off" ์์ฑ์ ์ฌ์ฉํ์ฌ ์๋ ์์ฑ์ ๋นํ์ฑํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<body> <form action="/ko/form/submit" method="get" autocomplete="off"> <div> <input type="text" placeholder="First Name"> </div> <div> <input type="text" id="lname" placeholder="Last Name" autocomplete="on"> </div> <div> <input type="number" placeholder="Credit card number"> </div> <input type="submit"> </form> </body>
ํ์ง๋ง Chrome์์๋ ์๋ํ์ง ์์ต๋๋ค. ์ด๋ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ์ฐํ๋๋ฉฐ ๋ ์ํผ์ ๋ณํ์ ์ฐพ์ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ . - X-Frame-Options ํค๋๋ ์ฌ์ดํธ ์ฝ๋์ ์ค์ ๋์ด ์์ง ์์ต๋๋ค.
์ด ํค๋๋ ํ๋ ์, iframe, ์ฝ์ ๋๋ ๊ฐ์ฒด ํ๊ทธ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋์์ ๋ฐ์ผ๋ฉด ์ฌ์ดํธ๋ฅผ ํ๋ ์ ์์ ์ฝ์ ํ๋ ๊ฒ์ ์์ ํ ๊ธ์งํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด X-Frame-Options: ๊ฑฐ๋ถ ๊ฐ์ ์ง์ ํด์ผ ํฉ๋๋ค. ๋๋ X-Frame-Options: sameorigin์ ์ง์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด iframe์ ์ฝ์ ํ๋ ๊ฒ์ ํด๋น ๋๋ฉ์ธ์์๋ง ๊ฐ๋ฅํฉ๋๋ค.
์ ์ํํฉ๋๊น?: ์ด๋ฌํ ํค๋๊ฐ ์์ผ๋ฉด ์ ์ฑ ์ฌ์ดํธ์์ ๋ค์๊ณผ ๊ฐ์ ํ์๋ฅผ ํ ์ ์์ต๋๋ค. ํด๋ฆญ์ฌํน. ์ด ๊ณต๊ฒฉ์ ์ํด ๊ณต๊ฒฉ์๋ ๋ฒํผ ์์ ํฌ๋ช ํ ํ๋ ์์ ๋ง๋ค์ด ์ฌ์ฉ์๋ฅผ ์์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ๊ธฐ๊พผ์ ์น์ฌ์ดํธ์ ์์ ๋คํธ์ํน ํ์ด์ง๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ฌ์ฉ์๋ ์์ ์ด ์ด ์ฌ์ดํธ์ ๋ฒํผ์ ํด๋ฆญํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋์ ํด๋ฆญ์ด ์ฐจ๋จ๋๊ณ ์ฌ์ฉ์์ ์์ฒญ์ด ํ์ฑ ์ธ์ ์ด ์๋ ์์ ๋คํธ์ํฌ๋ก ์ ์ก๋ฉ๋๋ค. ์ด๋ ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์๋ฅผ ๋์ ํ์ฌ ์คํธ์ ๋ณด๋ด๊ฑฐ๋ ๊ตฌ๋ ์์ ์ข์์๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋นํ์ฑํํ์ง ์์ผ๋ฉด ๊ณต๊ฒฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ฒํผ์ ์ ์ฑ ์ฌ์ดํธ์ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ทํ์ ์ถ์ฒ ํ๋ก๊ทธ๋จ์ด๋ ์ฌ์ฉ์์๊ฒ ๊ด์ฌ์ด ์์ ์ ์์ต๋๋ค.
์น ๊ฐ๋ฐ์๊ฐ ๊ธฐ์ตํด์ผ ํ ๊ฒ: ์น ์๋ฒ๋ ๋ก๋ ๋ฐธ๋ฐ์์ ์ถฉ๋ํ๋ ๊ฐ์ ๊ฐ์ง X-Frame-Options๋ฅผ ์ค์ ํ ๊ฒฝ์ฐ ์ทจ์ฝ์ ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์๋ฒ์ ๋ฐธ๋ฐ์๋ ๋ฐฑ์๋ ์ฝ๋์ ๋นํด ์ฐ์ ์์๊ฐ ๋๊ธฐ ๋๋ฌธ์ ํค๋๋ฅผ ๋ค์ ์์ฑํฉ๋๋ค.
X-Frame-Options ํค๋์ ๊ฑฐ๋ถ ๋ฐ ๋์ผ ์ถ์ฒ ๊ฐ์ Yandex ์น ๋ทฐ์ด์ ์๋์ ๋ฐฉํดํฉ๋๋ค. ์น๋ทฐ์ด์์ iframe ์ฌ์ฉ์ ํ์ฉํ๋ ค๋ฉด ์ค์ ์์ ๋ณ๋์ ๊ท์น์ ์์ฑํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด nginx์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
http{ ... map $http_referer $frame_options { "~webvisor.com" "ALLOW-FROM http://webvisor.com"; default "SAMEORIGIN"; } add_header X-Frame-Options $frame_options; ... }
- PRSSI(๊ฒฝ๋ก ๊ธฐ์ค ์คํ์ผ์ํธ ๊ฐ์ ธ์ค๊ธฐ) ์ทจ์ฝ์ .
์ด๋ ์ฌ์ดํธ ์คํ์ผ์ ์ทจ์ฝ์ ์ ๋๋ค. ์คํ์ผ ํ์ผ์ ์ก์ธ์คํ๊ธฐ ์ํด href="/ko/somefolder/styles.css/"์ ๊ฐ์ ์๋ ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค. ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์๋ฅผ ์ ์ฑ ํ์ด์ง๋ก ๋ฆฌ๋๋ ์ ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ฉด ์ด๋ฅผ ์ด์ฉํ๊ฒ ๋ฉ๋๋ค. ํ์ด์ง๋ ํด๋น URL์ ์๋ ๋งํฌ๋ฅผ ์ฝ์ ํ๊ณ ์คํ์ผ ํธ์ถ์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค. ์คํ์ผ์ ๊ฐ์ฅํ์ฌ ์ ์์ ์ธ ์์ ์ ์ํํ ์ ์๋ badsite.ru/โฆ/somefolder/styles.css/์ ๊ฐ์ ์์ฒญ์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
์ ์ํํฉ๋๊น?: ์ฌ๊ธฐ๊พผ์ด ๋ ๋ค๋ฅธ ๋ณด์ ํ์ ์ ๋ฐ๊ฒฌํ๋ฉด ์ด ์ทจ์ฝ์ ์ ์ ์ฉํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฟ ํค๋ ํ ํฐ์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํ์น ์ ์์ต๋๋ค.
์น ๊ฐ๋ฐ์๊ฐ ๊ธฐ์ตํด์ผ ํ ๊ฒ: X-Content-Type-Options ํค๋๋ฅผ nosniff๋ก ์ค์ ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ๋ ์คํ์ผ์ ๋ํ ์ฝํ ์ธ ์ ํ์ ํ์ธํฉ๋๋ค. ์ ํ์ด text/css๊ฐ ์๋ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ๋ ์์ฒญ์ ์ฐจ๋จํฉ๋๋ค.
์ฌ๊ฐํ ์ทจ์ฝ์
- ๋น๋ฐ๋ฒํธ ํ๋๊ฐ ์๋ ํ์ด์ง๊ฐ ์์ ํ์ง ์์ ์ฑ๋์ ํตํด ์๋ฒ์์ ์ ์ก๋ฉ๋๋ค(๋น๋ฐ๋ฒํธ ํ๋๊ฐ ํฌํจ๋ HTML ์์์ HTTP๋ฅผ ํตํด ์ ๊ณต๋จ).
์ํธํ๋์ง ์์ ์ฑ๋์ ํตํ ์๋ฒ์ ์๋ต์ "์ค๊ฐ์" ๊ณต๊ฒฉ์ ์ทจ์ฝํฉ๋๋ค. ํ์ด์ง๊ฐ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์ด๋ํ๋ ๋์ ๊ณต๊ฒฉ์๋ ํธ๋ํฝ์ ๊ฐ๋ก์ฑ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ๋ผ์ด๋ค ์ ์์ต๋๋ค.
์ ์ํํฉ๋๊น?: ์ฌ๊ธฐ๊พผ์ ํ์ด์ง๋ฅผ ๊ต์ฒดํ๊ณ ์ฌ์ฉ์์๊ฒ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์์์ ๋ณด๋ผ ์ ์์ผ๋ฉฐ, ์ด ์์์ ๊ณต๊ฒฉ์์ ์๋ฒ๋ก ์ด๋๋ฉ๋๋ค.
์น ๊ฐ๋ฐ์๊ฐ ๊ธฐ์ตํด์ผ ํ ๊ฒ: ์ผ๋ถ ์ฌ์ดํธ์์๋ ๋น๋ฐ๋ฒํธ ๋์ ์ด๋ฉ์ผ/์ ํ๋ก ์ผํ์ฉ ์ฝ๋๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด๋ ๋๋ค. ์ด ๊ฒฝ์ฐ ์ทจ์ฝ์ ์ ๊ทธ๋ค์ง ์ฌ๊ฐํ์ง ์์ง๋ง ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉ์์ ์ถ์ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค.
- ์์ ํ์ง ์์ ์ฑ๋์ ํตํด ๋ก๊ทธ์ธ ๋ฐ ๋น๋ฐ๋ฒํธ๊ฐ ํฌํจ๋ ์์ ๋ณด๋ด๊ธฐ(๋ก๊ทธ์ธ ์์์ HTTPS๋ฅผ ํตํด ์ ์ถ๋์ง ์์)
์ด ๊ฒฝ์ฐ ๋ก๊ทธ์ธ ๋ฐ ๋น๋ฐ๋ฒํธ๊ฐ ํฌํจ๋ ์์์ด ์ํธํ๋์ง ์์ ์ฑ๋์ ํตํด ์ฌ์ฉ์๋ก๋ถํฐ ์๋ฒ๋ก ์ ์ก๋ฉ๋๋ค.
์ ์ํํฉ๋๊น?: ์ด์ ์ฌ๋ก์ ๋ฌ๋ฆฌ ์ด๋ฏธ ์ฌ๊ฐํ ์ทจ์ฝ์ ์ด ์กด์ฌํฉ๋๋ค. ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ก์ฑ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์์ฑํ ํ์๋ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ก์ฑ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
- ์๋ ค์ง ์ทจ์ฝ์ ์ด ์๋ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ.
์ค์บ ์ค์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์ํ ๋ฒ์ ์ด ํฌํจ๋ jQuery์์ต๋๋ค. ๊ฐ ๋ฒ์ ์๋ ์ ์ด๋ ํ๋ ์ด์์ ์๋ ค์ง ์ทจ์ฝ์ ์ด ์์ต๋๋ค. ์ทจ์ฝ์ ์ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ์ํฅ์ ๋งค์ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
์ ์ํํฉ๋๊น?: ์๋ ค์ง ์ทจ์ฝ์ ์ ๋ํ ์ต์คํ๋ก์์ด ์์ต๋๋ค. ์:
์น ๊ฐ๋ฐ์๊ฐ ๊ธฐ์ตํด์ผ ํ ๊ฒ: ์ ๊ธฐ์ ์ผ๋ก ์ฃผ๊ธฐ(์๋ ค์ง ์ทจ์ฝ์ ๊ฒ์ - ์์ - ํ์ธ)๋ก ๋์๊ฐ๋๋ค. ์๋ฅผ ๋ค์ด ์ค๋๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ๊ฑฐ๋ ๋น์ฉ์ ์ ์ฝํ๊ธฐ ์ํด ์๋์ ์ผ๋ก ๋ ๊ฑฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋ ค์ง ์ทจ์ฝ์ ์ ์์ ํ ์ ์๋ ๊ธฐํ๋ฅผ ์ฐพ์ผ์ญ์์ค. - XSS(๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ
).
XSS(๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ ) ๋๋ ๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๊ณต๊ฒฉ์ผ๋ก, ์ด๋ก ์ธํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฑ ์ฝ๋๊ฐ ์ ์ ๋ฉ๋๋ค. Qualys๊ฐ ์ด๋ฌํ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ๋ฉด ์ ์ฌ์ ์ธ ๊ณต๊ฒฉ์๊ฐ ์ ์์ ์ธ ์์ ์ ์ํํ๊ธฐ ์ํด ์์ ์ js ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ดํธ ์ฝ๋์ ๋์ ํ ์ ์๊ฑฐ๋ ์ด๋ฏธ ๋์ ํ์์ ์๋ฏธํฉ๋๋ค.์ ์ฅ๋ XSS ์คํฌ๋ฆฝํธ๊ฐ ์๋ฒ์ ๋ด์ฅ๋์ด ๊ณต๊ฒฉ๋ฐ์ ํ์ด์ง๊ฐ ๋ธ๋ผ์ฐ์ ์์ ์ด๋ฆด ๋๋ง๋ค ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ ์ํํฉ๋๋ค.
๋ฐ์ฌ๋ XSS HTTP ์์ฒญ์ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์ฝ์ ๋ ์ ์์ผ๋ฏ๋ก ์ํํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ HTTP ์์ฒญ์ ์์ ํ์ง๋ง ๋ฐ์ดํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ์ง ์๊ณ ํจํค์งํ ํ ์ฆ์ ๋ณด๋ ๋๋ค. ๊ณต๊ฒฉ์๊ฐ ํธ๋ํฝ์ ๊ฐ๋ก์ฑ์ ๋ค์๊ณผ ๊ฐ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ๋ฉด
<script>/*+ััะพ+ัะพ+ะฟะปะพั ะพะต+*/</script>
๊ทธ๋ฌ๋ฉด ํด๋ผ์ด์ธํธ๋ฅผ ๋์ ํ์ฌ ์ ์์ ์ธ ์์ฒญ์ด ์ ์ก๋ฉ๋๋ค.
XSS์ ๋๋ผ์ด ์: CVC ์ ๋ ฅ ํ์ด์ง, ์นด๋ ๋ง๋ฃ ๋ ์ง ๋ฑ์ ์๋ฎฌ๋ ์ด์ ํ๋ js ์ค๋ํผ์ ๋๋ค.
์น ๊ฐ๋ฐ์๊ฐ ๊ธฐ์ตํด์ผ ํ ๊ฒ: Content-Security-Policy ํค๋์์ script-src ์์ฑ์ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๋ขฐํ ์ ์๋ ์์ค์์๋ง ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์คํํ๋๋ก ํฉ๋๋ค. ์๋ฅผ ๋ค์ด script-src 'self'๋ ๋น์ฌ ์ฌ์ดํธ์ ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ง ํ์ฉ ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ธ๋ผ์ธ ์ฝ๋์ ๋๋ค. unsafe-inline ๊ฐ์ ์ฌ์ฉํ๋ ์ธ๋ผ์ธ ์๋ฐ์คํฌ๋ฆฝํธ๋ง ํ์ฉํฉ๋๋ค. ์ด ๊ฐ์ ์ธ๋ผ์ธ js/css ์ฌ์ฉ์ ํ์ฉํ์ง๋ง js ํ์ผ ํฌํจ์ ๊ธ์งํ์ง๋ ์์ต๋๋ค. script-src 'self'์ ํจ๊ป ์ธ๋ถ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ง ์๋๋ก ๋นํ์ฑํํฉ๋๋ค.Report-uri๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ฒ์ ๊ธฐ๋กํ๊ณ ์ด๋ฅผ ์ฌ์ดํธ์ ๊ตฌํํ๋ ค๋ ์๋๋ฅผ ์ดํด๋ณด์ญ์์ค.
- SQL ์ฃผ์
.
์ด ์ทจ์ฝ์ ์ ์น ์ฌ์ดํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ก์ธ์คํ๋ ์น ์ฌ์ดํธ์ SQL ์ฝ๋๋ฅผ ์ฃผ์ ํ ๊ฐ๋ฅ์ฑ์ ๋ํ๋ ๋๋ค. ์ฌ์ฉ์์ ๋ฐ์ดํฐ๊ฐ ๊ฒ์ฌ๋์ง ์์ผ๋ฉด SQL ์ฃผ์ ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ ํ์ฑ์ ํ์ธํ์ง ์๊ณ ์ฆ์ ์ฟผ๋ฆฌ์ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์น ์ฌ์ดํธ์ ์์์์ ์ ๋ ฅ์ด ๋ฐ์ดํฐ ์ ํ๊ณผ ์ผ์นํ๋์ง ํ์ธํ์ง ์๋ ๊ฒฝ์ฐ ์ด๋ฐ ์ผ์ด ๋ฐ์ํฉ๋๋ค.์ ์ํํฉ๋๊น?: ๊ณต๊ฒฉ์๊ฐ ์ด ์์์ SQL ์ฟผ๋ฆฌ๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ถฉ๋ํ๊ฑฐ๋ ๊ธฐ๋ฐ ์ ๋ณด๊ฐ ๋ ธ์ถ๋ ์ ์์ต๋๋ค.
์น ๊ฐ๋ฐ์๊ฐ ๊ธฐ์ตํด์ผ ํ ๊ฒ: ๋ธ๋ผ์ฐ์ ์์ ๋์ค๋ ๋ด์ฉ์ ๋ฏฟ์ง ๋ง์ญ์์ค. ํด๋ผ์ด์ธํธ ์ธก๊ณผ ์๋ฒ ์ธก ๋ชจ๋์์ ์์ ์ ๋ณดํธํด์ผ ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ ์ธก์์๋ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์์ฑํฉ๋๋ค.
๋๋ฆฌ ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ์ ๋ด์ฅ๋ ๊ธฐ๋ฅ์ ์๋ฒ์์ ์์ฌ์ค๋ฌ์ด ๋ฌธ์๋ฅผ ํผํ๋ ๋ฐ๋ ๋์์ด ๋ฉ๋๋ค. ๋ํ ์๋ฒ์์ ๋งค๊ฐ๋ณ์ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ ์์ฉ์ด ์ ํํ ๋ฐ์ํ๋ ์์น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
์ํธ ์์ฉ์ ID ์์ฒญ(ID ๋ณ๊ฒฝ), ์ ์ฌ์ฉ์ ์์ฑ, ์ ๋๊ธ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํญ๋ชฉ๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ๋ฐ์ ๋ ๋ฐ์ํฉ๋๋ค. SQL ์ฃผ์ ์ด ๋ฐ์ํ ์ ์๋ ๊ณณ์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ ์ฝ๋๋ฅผ ์ญ์ ํ๋๋ผ๋ SQL ์ฃผ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ผ๋ฐ ๊ถ๊ณ
๋ฐํด๋ฅผ ์ฌ๋ฐ๋ช ํ์ง ๋ง๊ณ ๊ฒ์ฆ๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ธ์.. ์ผ๋ฐ์ ์ผ๋ก ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ๊ฐ ๋ ์์ ํฉ๋๋ค. .NET - ASP.NET MVC ๋ฐ ASP.NET Core, Python - Django ๋๋ Flask, Ruby - Ruby on Rails, PHP - Symfony, Laravel, Yii, JavaScript - Node.JS-Express.js, Java - ์คํ๋ง MVC.
๊ณต๊ธ์ ์ฒด ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ๋ฅด๊ณ ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ธ์.. ๊ทธ๋ค์ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ๊ณ ์ต์คํ๋ก์์ ์์ฑํ์ฌ ๊ณต๊ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ํ๋ฉด ๋ชจ๋ ์ผ์ด ๋ค์ ์ผ์ด๋ ๊ฒ์ ๋๋ค. ์ํํธ์จ์ด ๊ณต๊ธ์ ์ฒด์ ์์ ์ ์ธ ๋ฒ์ ์ ๋ฐ์ดํธ๋ฅผ ๊ตฌ๋ ํ์ธ์.
์ ๊ทผ๊ถํ ํ์ธ. ์๋ฒ ์ธก์์๋ ํญ์ ๊ทํ์ ์ฝ๋๋ฅผ ์ฒ์๋ถํฐ ๋ง์ง๋ง โโ๋ฌธ์๊น์ง ์ฌ์ดํธ๋ฅผ ํ๊ดดํ๊ณ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์นจํดํ๋ ค๋ ๊ฐ์ฅ ๋ฏธ์ํ๋ ์ ์ด ์์ฑํ ๊ฒ์ฒ๋ผ ์ทจ๊ธํ์ญ์์ค. ๋์ฑ์ด ๋๋ก๋ ์ด๊ฒ์ด ์ฌ์ค์ ๋๋ค.
ํด๋ก , ํ ์คํธ ์ฌ์ดํธ๋ฅผ ์ฌ์ฉํ ํ ํ๋ก๋์ ์ ์ฌ์ฉ. ์ด๋ ์ฒซ์งธ, ์์ฐ์ ์ธ ํ๊ฒฝ์์ ์ค์์ ์ค์๋ฅผ ํผํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค. ์์ฐ์ ์ธ ํ๊ฒฝ์ ๋์ ๊ฐ์ ธ์ค๊ณ ๋จ์ํ ์์ฐ ํ๊ฒฝ์ ์ค์ํฉ๋๋ค. ๋ฌธ์ ๋ฅผ ์ถ๊ฐ, ์์ ๋๋ ์ข ๋ฃํ ๋๋ ํ ์คํธ ํ๊ฒฝ์์ ์์ ํ ๋ค์ ๋ฐ๊ฒฌ๋ ๊ธฐ๋ฅ๊ณผ ์ทจ์ฝ์ ์ ํ์ธํ ๋ค์ ํ๋ก๋์ ํ๊ฒฝ์์ ์์ ํ ๊ณํ์ ์ธ์ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณดํธํ์ธ์.
์ถ์ฒ : habr.com