๋ชฉ์ฐจ
Secure Header๋ฅผ ์ด์ฉํ ๋ธ๋ผ์ฐ์ ๋ณด์ ํค๋ HSTS(HTTP Strict Transport Security)
์๋ ํ์ธ์, ์ ๋ฌธ ๋ธ๋ก๊ฑฐ๋ก์ ๊น๋ํ๊ณ ๋ ์ฐฝ์ ์ธ ๊ธ์ ์ถ๊ตฌํ์๋ ๋งํผ, ์ต์ ํ๋ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํด ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์๋๋ 'Secure Header๋ฅผ ์ด์ฉํ ๋ธ๋ผ์ฐ์ ๋ณด์'์ ๋ํ ์์ธํ ๋ธ๋ก๊ทธ ํฌ์คํ ์ ๋๋ค.
Secure Header๋ฅผ ์ด์ฉํ ๋ธ๋ผ์ฐ์ ๋ณด์
์น ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ ๊ณผ ๋ณด์ ํ์์ฑ
1990๋ ์ ํ์ํ ์น ๋ธ๋ผ์ฐ์ (Web Browser)๋ ์น ์๋ฒ์ ์ํธ ์์ฉํ๋ฉฐ HTML ๋ฌธ์๋ ํ์ผ์ ์ถ๋ ฅํ๋ ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์คํฌํฑ, ๋ชจ๋ฐ์ผ ๋ฑ ๋ค์ํ ํ๊ฒฝ์์ HTTP ์ฌ์ฉ์ ์์ด์ ํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ธ๋ก๋ฒ ์์ฅ์กฐ์ฌ์ ์ฒด ์คํฏ์นด์ดํฐ(StatCounter)์ 2020๋ 3์ ์ ์ธ๊ณ ๋ธ๋ผ์ฐ์ ์์ฅ ์ ์ ์จ์ ๋ฐ๋ฅด๋ฉด, ํฌ๋กฌ(Chrome)์ด 65.99%๋ก ์ ๋๋ฅผ ์ฐจ์งํ๊ณ ์์ผ๋ฉฐ, ๊ทธ ๋ค๋ฅผ ์ฌํ๋ฆฌ(Safari), ํ์ด์ดํญ์ค(Firefox), ์ผ์ฑ ์ธํฐ๋ท(Samsung Internet), ์ฃ์ง(Edge), ์คํ๋ผ(Opera)๊ฐ ์๊ณ ์์ต๋๋ค.
์ด๋ฌํ ํต๊ณ๋ฅผ ๋ณด๋ฉด ์ ์ธ๊ณ์ ์ผ๋ก ๋ฐ์คํฌํฑ ํ๊ฒฝ์์๋ ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์ ์ฌ์ฉ๋ฅ ์ด ๋์ผ๋ฉฐ, ๋งฅ(Mac) ์ฌ์ฉ์๋ค์ ์ฌํ๋ฆฌ๋ฅผ ์ ํธํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ๋ํ, ํ๋ซํผ๋ณ ์น ์ฌ์ดํธ ์ด์ฉ ํํฉ์ ์ดํด๋ณด๋ฉด ๋ชจ๋ฐ์ผ์์์ ๋ธ๋ผ์ฐ์ ์ด์ฉ๋ฅ ์ด 51.9%๋ก ๋ฐ์คํฌํฑ์ 45.4%๋ฅผ ์์ง๋ฅด๊ณ ์์ต๋๋ค. ํนํ ๊ตญ๋ด์์๋ ์ผ์ฑ ๊ฐค๋ญ์ ์ค๋งํธํฐ์ ์ํฅ์ผ๋ก ์ผ์ฑ ์ธํฐ๋ท ๋ธ๋ผ์ฐ์ ์ ์ ์ ์จ์ด ๋๊ฒ ๋ํ๋๊ณ ์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ์ ๋ค์์ฑ๊ณผ ์ฌ์ฉ ํ๊ฒฝ์ ํ๋๋ก ์ธํด ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ์ ์ฌ์ด๋ฒ ๊ณต๊ฒฉ ๋ํ ์ฆ๊ฐํ๊ณ ์์ต๋๋ค. ํ๋์ ์น ์ฌ์ดํธ๋ค์ ๋ค์ํ ๊ฐ๋ฐ์ฌ๊ฐ ๋ง๋ ์น ํ์ด์ง์ ์คํฌ๋ฆฝํธ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ 3์์ ์์ค ์ฝ๋๋ฅผ ์กฐํฉํ์ฌ ๊ตฌ์ถ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๋ณด์ ๊ด๋ฆฌ์ ์ทจ์ฝํ ์๋ฐ์ ์์ต๋๋ค. ์ด๋ฌํ ์ด์ ๋ก ๋ค์์ ๋ธ๋ผ์ฐ์ ์ ์กฐ์ฌ๋ค์ HTTP ๋ณด์ ํค๋(Security Header)๋ฅผ ํตํด ์น ์ทจ์ฝ์ ์ ๋ํ ๋ณด์์ ๊ฐํํ๋ ๋์ ๋ฐฉ์์ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
HTTP ๋ณด์ ํค๋์ ๊ฐ์
HTTP ํค๋๋ HTTP ํ๋กํ ์ฝ์ ์ด์ฉํ์ฌ ์์ฒญ๊ณผ ์๋ต ์ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ฉฐ, ์ธ์ฆ, ์บ์ฑ, ์ ์ด, ์ฟ ํค, ์ฐ๊ฒฐ, ๋ณด์ ๋ฑ ๋ค์ํ ์นดํ ๊ณ ๋ฆฌ๋ก ๋๋ฉ๋๋ค. ๊ทธ์ค ๋ณด์๊ณผ ๊ด๋ จ๋ Secure Header๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์์ ๊ฐํํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ Secure Header ์ค HSTS(HTTP Strict Transport Security), X-XSS-Protection, CSP(Content-Security-Policy)์ ๋ํด ์์ธํ๊ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
HSTS(HTTP Strict Transport Security) ์์ธ ๋ถ์
HSTS์ ๊ฐ๋ ๊ณผ ํ์์ฑ
HSTS๋ ์น ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ HTTPS๋ฅผ ๊ฐ์ ๋ก ์ฌ์ฉํ๋๋ก ์ง์ํ๋ ๋ณด์ ์ ์ฑ ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก HTTPS๋ HTTP์ ๋จ์ ์ ๋ณด์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ฌ ์ ์กํ๋ ํ๋กํ ์ฝ๋ก, ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ณดํธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์๊ฐ HTTP๋ก ์ ์์ ์๋ํ๊ฑฐ๋ ๊ณต๊ฒฉ์๊ฐ ์๋์ ์ผ๋ก HTTP ์ ์์ ์ ๋ํ ๊ฒฝ์ฐ, ์ํธํ๋์ง ์์ ํ๋ฌธ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋์ด ๋ณด์ ์ํ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
HSTS๋ฅผ ์ ์ฉํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ HTTP๋ก ์์ฒญํ๋๋ผ๋ ์๋์ผ๋ก HTTPS๋ก ์ ํ๋์ด ์ ์ก๋๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์ทจ์ฝ์ ์ ํจ๊ณผ์ ์ผ๋ก ๋ฐฉ์งํ ์ ์์ต๋๋ค.
HSTS์ ์ ์ฉ ๋ฐฉ๋ฒ
HSTS๋ ์๋ฒ์์ ์๋ต ํค๋์ 'Strict-Transport-Security'๋ฅผ ์ค์ ํ์ฌ ์ ์ฉํฉ๋๋ค. ์ฃผ์ ์ง์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- max-age: HSTS ์ ์ฑ ์ด ์ ์ง๋๋ ๊ธฐ๊ฐ์ ์ด ๋จ์๋ก ์ง์ ํฉ๋๋ค.
- includeSubDomains: ํด๋น ๋๋ฉ์ธ์ ๋ชจ๋ ์๋ธ๋๋ฉ์ธ์๋ HSTS ์ ์ฑ ์ ์ ์ฉํฉ๋๋ค.
- preload: ๋ธ๋ผ์ฐ์ ์ HSTS preload ๋ฆฌ์คํธ์ ๋๋ฉ์ธ์ ๋ฑ๋กํ์ฌ ์ด๊ธฐ ์ ์ ์์๋ HTTPS๋ฅผ ๊ฐ์ ํฉ๋๋ค.
์๋ฒ ์ค์ ์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋ ๋ ๋ฒจ์์ ํด๋น ํค๋๋ฅผ ์ถ๊ฐํ์ฌ ์ ์ฉํ ์ ์์ผ๋ฉฐ, ์ ์ฉ ํ์๋ hstspreload.org ๋ฑ์ ํตํด ์ ๋๋ก ์ ์ฉ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
X-XSS-Protection ์์ธ ๋ถ์
X-XSS-Protection์ ๊ฐ๋ ๊ณผ ํ์์ฑ
XSS(Cross-Site Scripting)๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ์ฅ ํํ ๊ณต๊ฒฉ ๊ธฐ๋ฒ ์ค ํ๋๋ก, ์ ์์ ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ์ฌ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํ์ทจํ๊ฑฐ๋ ์ฌ์ดํธ์ ์ ์์ ์ธ ๋์์ ๋ฐฉํดํฉ๋๋ค. X-XSS-Protection ํค๋๋ ๋ธ๋ผ์ฐ์ ๋ด์ฅ XSS ํํฐ๋ฅผ ํ์ฑํํ์ฌ ์ด๋ฌํ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ์ญํ ์ ํฉ๋๋ค.
X-XSS-Protection์ ์ ์ฉ ๋ฐฉ๋ฒ
X-XSS-Protection ํค๋๋ ๋ค์๊ณผ ๊ฐ์ ์ง์์๋ฅผ ๊ฐ์ง๋๋ค:
- 0: XSS ํํฐ๋ฅผ ๋นํ์ฑํํฉ๋๋ค.
- 1: XSS ํํฐ๋ฅผ ํ์ฑํํ๊ณ ๊ณต๊ฒฉ์ด ๊ฐ์ง๋๋ฉด ์คํฌ๋ฆฝํธ๋ฅผ ํํฐ๋งํฉ๋๋ค.
- 1; mode=block: ๊ณต๊ฒฉ์ด ๊ฐ์ง๋๋ฉด ์ ์ฒด ํ์ด์ง ๋ก๋๋ฅผ ์ฐจ๋จํฉ๋๋ค.
- 1; report=URI: ๊ณต๊ฒฉ์ด ๊ฐ์ง๋๋ฉด ์ง์ ๋ URI๋ก ๋ณด๊ณ ํฉ๋๋ค.
ํด๋น ํค๋๋ฅผ ์๋ฒ ์๋ต์ ์ถ๊ฐํ์ฌ ์ ์ฉํ๋ฉฐ, ๋ธ๋ผ์ฐ์ ์์ ์ง์ํ๋ ๊ฒฝ์ฐ์๋ง ๋์ํฉ๋๋ค. ์ ์ฉ ์์๋ก๋ PHP์์ header('X-XSS-Protection: 1; mode=block');
์ ๊ฐ์ด ์ค์ ํ ์ ์์ต๋๋ค.
CSP(Content-Security-Policy) ์์ธ ๋ถ์
CSP์ ๊ฐ๋ ๊ณผ ํ์์ฑ
CSP๋ ์น ํ์ด์ง์ ๋ก๋๋ ์ ์๋ ๋ฆฌ์์ค์ ์ถ์ฒ๋ฅผ ์ ํํ์ฌ XSS, ๋ฐ์ดํฐ ์ฝ์ , ํด๋ฆญ์ฌํน ๋ฑ ๋ค์ํ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๋ณด์ ์ ์ฑ ์ ๋๋ค. ์ ๋ขฐํ ์ ์๋ ์ฝํ ์ธ ์์ค๋ง์ ํ์ฉํ์ฌ ์ ์ฑ ์คํฌ๋ฆฝํธ์ ์คํ์ ์ฐจ๋จํฉ๋๋ค.
CSP์ ์ ์ฉ ๋ฐฉ๋ฒ
CSP๋ ์ฌ๋ฌ ์ง์์์ ์์ฑ๊ฐ์ ํตํด ์ธ๋ถ์ ์ธ ๋ณด์ ์ ์ฑ ์ ์ค์ ํ ์ ์์ต๋๋ค. ์ฃผ์ ์ง์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- default-src: ๊ธฐ๋ณธ ์ฝํ ์ธ ์์ค ์ง์
- script-src: ์คํฌ๋ฆฝํธ ํ์ผ์ ์์ค ์ง์
- style-src: ์คํ์ผ์ํธ์ ์์ค ์ง์
- img-src: ์ด๋ฏธ์ง ํ์ผ์ ์์ค ์ง์
์์ฑ๊ฐ์ผ๋ก๋ 'self', 'none', ํน์ ๋๋ฉ์ธ ๋ฑ์ ์ง์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedscripts.example.com;
์ ๊ฐ์ด ์ค์ ํ์ฌ ์์ฒด ๋๋ฉ์ธ๊ณผ ์ ๋ขฐํ ์ ์๋ ๋๋ฉ์ธ์์๋ง ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋๋ก ์ ํํ ์ ์์ต๋๋ค.
CSP๋ ์๋ฒ ์๋ต ํค๋๋ HTML์ ๋ฉํ ํ๊ทธ๋ฅผ ํตํด ์ ์ฉํ ์ ์์ผ๋ฉฐ, ์ ์ฉ ํ์๋ csp-evaluator.withgoogle.com ๋ฑ์ ํตํด ์ ์ฑ ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
์น ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ ๊ณผ ํจ๊ป ๋ค์ํ ์ฌ์ด๋ฒ ๊ณต๊ฒฉ ์ํ์ด ์ฆ๊ฐํ๊ณ ์์ผ๋ฉฐ, ํนํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ทจ์ฝ์ ์ ๋ ธ๋ฆฐ ๊ณต๊ฒฉ์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ๊ณ ์์ต๋๋ค. ์ด๋ฌํ ์ํ์ ๋์ํ๊ธฐ ์ํด HSTS, X-XSS-Protection, CSP์ ๊ฐ์ HTTP ๋ณด์ ํค๋๋ฅผ ์ ์ ํ๊ฒ ํ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ด๋ฌํ ๋ณด์ ํค๋๋ค์ ๋น๊ต์ ๊ฐ๋จํ ์ค์ ๋ง์ผ๋ก๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ์์ค์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์น ์ฌ์ดํธ๋ฅผ ์ด์ํ๋ ๊ธฐ์ ์ด๋ ๊ฐ๋ฐ์๋ค์ ์์ ์ ์๋น์ค์ ๋ง๋ ๋ณด์ ํค๋๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ ์ฉํ์ฌ ์ฌ์ฉ์๋ค์ ์์ ํ ์น ์ฌ์ฉ์ ๋ณด์ฅํด์ผ ํฉ๋๋ค. ๋ํ, ์๋ก์ด ๋ณด์ ์ํ์ ๋๋นํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก ์ต์ ๋ณด์ ๋ํฅ์ ํ์ ํ๊ณ ๋์ ๋ฐฉ์์ ๋ชจ์ํ๋ ๋ ธ๋ ฅ์ด ํ์ํฉ๋๋ค.
ํค์๋: Secure Header, ๋ธ๋ผ์ฐ์ ๋ณด์, HSTS, X-XSS-Protection, CSP, ์น ์ทจ์ฝ์ , HTTPS, XSS ๊ณต๊ฒฉ, ์ฝํ ์ธ ๋ณด์ ์ ์ฑ , ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์
๋๊ธ