๋ณด์ ํค๋ ๊ฒ์ฌ
CSP / XFO / X-Content-Type / Referrer / Permissions / HSTS
๋นํ์ ์ด๋ฒ ๋ฌ 5ํ ๋จ์
๋ฌด๋ฃ ๊ฐ์
ํ๋ฉด ์ 20ํ
6๋ ํต์ฌ ๋ณด์ ํค๋ ์ข ํฉ ๊ฒ์ฌ
HTTP ์๋ต ํค๋๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ์ ๋ณด์ ๊ธฐ๋ฅ์ ํ์ฑํํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์ํ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค.
์ธก์ ๋๊ตฌ: Node.js ๊ธฐ๋ฐ ์์ฒด ๊ฐ๋ฐ ์คํฌ๋ฆฝํฐ (axios HTTP ํด๋ผ์ด์ธํธ ํ์ฉ)
ํ ์คํธ ๋ชฉ์ : XSS, ํด๋ฆญ์ฌํน, MIME ์ค๋ํ, ์ ๋ณด ์ ์ถ ๋ฑ ์ฃผ์ ์น ์ทจ์ฝ์ ๋ฐฉ์ด ์์ค ํ๊ฐ
๊ฒ์ฌ ํญ๋ชฉ:
โข Content-Security-Policy (CSP) โ ๋ฆฌ์์ค ๋ก๋ ์ถ์ฒ๋ฅผ ์ ํ, XSSยท์๋ํํฐ ์คํฌ๋ฆฝํธ ์ ์ฉ ๋ฐฉ์ง
โข X-Frame-Options / frame-ancestors โ iframe ์ฝ์ ์ฐจ๋จ, ํด๋ฆญ์ฌํนยทํผ์ฑํ ์ค๋ฒ๋ ์ด ๋ฐฉ์ง
โข X-Content-Type-Options โ MIME ์ค๋ํ ์ฐจ๋จ, ์๋ชป๋ ์คํ ์ทจ์ฝ์ ๋ฐฉ์ด
โข Referrer-Policy โ ์ธ๋ถ ์ ์ก ์ URL ์ ๋ณด ์ต์ํ, ๊ฐ์ธ์ ๋ณดยท๋ด๋ถ๊ฒฝ๋ก ๋ ธ์ถ ๋ฐฉ์ง
โข Permissions-Policy โ ์์นยท๋ง์ดํฌยท์นด๋ฉ๋ผ ๋ฑ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฅ ์ ํ, ํ๋ผ์ด๋ฒ์ ๋ณดํธ
โข Strict-Transport-Security (HSTS) โ HTTPS ๊ฐ์ , ์ค๊ฐ์ ๊ณต๊ฒฉยท๋ค์ด๊ทธ๋ ์ด๋ ๋ฐฉ์ง
์ค์ ์์น: CDN(Cloudflare) ยท ์น์๋ฒ(Nginx/Apache) ยท ์ฑ(Laravel ๋ฑ)
๋ชจ๋ ํค๋๊ฐ ํจ๊ป ์ ์ฉ๋ ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋ณด์ ํจ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
์ธก์ ๋๊ตฌ: Node.js ๊ธฐ๋ฐ ์์ฒด ๊ฐ๋ฐ ์คํฌ๋ฆฝํฐ (axios HTTP ํด๋ผ์ด์ธํธ ํ์ฉ)
ํ ์คํธ ๋ชฉ์ : XSS, ํด๋ฆญ์ฌํน, MIME ์ค๋ํ, ์ ๋ณด ์ ์ถ ๋ฑ ์ฃผ์ ์น ์ทจ์ฝ์ ๋ฐฉ์ด ์์ค ํ๊ฐ
๊ฒ์ฌ ํญ๋ชฉ:
โข Content-Security-Policy (CSP) โ ๋ฆฌ์์ค ๋ก๋ ์ถ์ฒ๋ฅผ ์ ํ, XSSยท์๋ํํฐ ์คํฌ๋ฆฝํธ ์ ์ฉ ๋ฐฉ์ง
โข X-Frame-Options / frame-ancestors โ iframe ์ฝ์ ์ฐจ๋จ, ํด๋ฆญ์ฌํนยทํผ์ฑํ ์ค๋ฒ๋ ์ด ๋ฐฉ์ง
โข X-Content-Type-Options โ MIME ์ค๋ํ ์ฐจ๋จ, ์๋ชป๋ ์คํ ์ทจ์ฝ์ ๋ฐฉ์ด
โข Referrer-Policy โ ์ธ๋ถ ์ ์ก ์ URL ์ ๋ณด ์ต์ํ, ๊ฐ์ธ์ ๋ณดยท๋ด๋ถ๊ฒฝ๋ก ๋ ธ์ถ ๋ฐฉ์ง
โข Permissions-Policy โ ์์นยท๋ง์ดํฌยท์นด๋ฉ๋ผ ๋ฑ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฅ ์ ํ, ํ๋ผ์ด๋ฒ์ ๋ณดํธ
โข Strict-Transport-Security (HSTS) โ HTTPS ๊ฐ์ , ์ค๊ฐ์ ๊ณต๊ฒฉยท๋ค์ด๊ทธ๋ ์ด๋ ๋ฐฉ์ง
์ค์ ์์น: CDN(Cloudflare) ยท ์น์๋ฒ(Nginx/Apache) ยท ์ฑ(Laravel ๋ฑ)
๋ชจ๋ ํค๋๊ฐ ํจ๊ป ์ ์ฉ๋ ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋ณด์ ํจ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
| ๋ฑ๊ธ | ์ ์ | ๊ธฐ์ค |
|---|---|---|
| A+ | 95-100 |
CSP ๊ฐํจ(nonce/hash/strict-dynamic, unsafe-*
๋ฏธ์ฌ์ฉ) XFO: DENY/SAMEORIGIN ๋๋ frame-ancestors ์ ํ X-Content-Type: nosniff Referrer-Policy: strict-origin-when-cross-origin ์ด์ Permissions-Policy: ๋ถํ์ ๊ธฐ๋ฅ ์ฐจ๋จ HSTS: 6๊ฐ์โ + ์๋ธ๋๋ฉ์ธ |
| A | 85-94 |
CSP ์กด์ฌ(์ฝํจ ํ์ฉ) ๋๋ ๋น-CSP 5ํญ๋ชฉ ์ฐ์ XFO ์ ์ฉ(๋๋ frame-ancestors ์ ํ) X-Content-Type: nosniff Referrer-Policy: ๊ถ์ฅ ๊ฐ ์ฌ์ฉ Permissions-Policy: ๊ธฐ๋ณธ ์ ํ ์ ์ฉ HSTS: 6๊ฐ์โ |
| B | 70-84 |
CSP ์์/์ฝํจ XFO ์ ์ ์ ์ฉ X-Content-Type: ์์ Referrer-Policy: ์ํธ/๋ณดํต Permissions-Policy: ์ผ๋ถ ์ ํ HSTS: ๋จ๊ธฐ ๋๋ ์๋ธ๋๋ฉ์ธ ๋ฏธํฌํจ |
| C | 55-69 |
ํค๋ ์ผ๋ถ๋ง ์กด์ฌ CSP ์์/์ฝํจ Referrer-Policy ์ฝํจ X-Content-Type ๋๋ฝ HSTS ์์ ๋๋ ๋งค์ฐ ์งง์ |
| D | 40-54 |
ํต์ฌ ํค๋ 1~2๊ฐ๋ง CSP ์์ Referrer ์ฝํจ/์์ ๊ธฐํ ํค๋ ๋ค์ ๋๋ฝ |
| F | 0-39 |
๋ณด์ ํค๋ ์ ๋ฌด์ ๊ฐ๊น์ CSP/XFO/X-Content ์์ Referrer-Policy ์์ HSTS ์์ |
๋ฑ๊ธ ์ ์ฑ
: A+๋ ๊ฐํ CSP๊ฐ ํ์์
๋๋ค. CSP๊ฐ ์์ด๋ ๋น-CSP 5ํญ๋ชฉ(XFO, XCTO,
Referrer, Permissions, HSTS)์ด ๋ชจ๋ ์ฐ์ํ๋ฉด A๋ฅผ ๋ถ์ฌํฉ๋๋ค.
์์ง ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค
ํ ์คํธ๋ฅผ ์คํํ๋ฉด ๋ณด์ ํค๋ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์์ง ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค
ํ ์คํธ๋ฅผ ์คํํ๋ฉด Raw JSON ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
๊ฒ์ฌ ๋ด์ญ์ ๋ณด๋ ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค.
๋๋ฉ์ธ ๊ด๋ฆฌ๋ ๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค.
๋ณด์ ์์ญ์ ๋ค๋ฅธ ๊ฒ์ฌ
- SSL ๊ธฐ๋ณธ โ ์ธ์ฆ์ยทํ๋กํ ์ฝยท์ทจ์ฝ์
- SSL ์ฌํ โ TLSยท์ํธํ ์ค์ํธยทOCSP
- ์ทจ์ฝ์ ์ค์บ โ OWASP ZAP ํจ์๋ธ ์ค์บ ์ธ์ฆ
- ์ต์ ์ทจ์ฝ์ โ CVE ํ ํ๋ฆฟ ๊ธฐ๋ฐ ํ์ง ์ธ์ฆ