[TIL] ์ธ์ฆ/๋ณด์
๐๐ป ์ธ์ฆ / ๋ณด์
๐ก HTTP ๋ฌด์ํ์ฑ
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ณํ ์ ์์์ ์๋ฏธ
- ์ฆ, ๋งค๋ฒ ์๋ก์ด ์ธ์ฆ์ ํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์ ๋ฐ์
* ์ํ๋ฅผ ๊ธฐ์ตํ๋ ๋ฐฉ๋ฒ
โ ์ฟ ํค โก ์ธ์
โข OAuth์ JWT
๐ HTTPS
* HTTP
- ์ธํฐ๋ท์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ํต์ ํ๋กํ ์ฝ
* HTTPS
- HTTP + Secure
- HTTPS : Hyper Text Transfer Protocol Secure Socket layerd์ ์ฝ์
- HTTPS = HTTP over SSL(TLS) = HTTP over Secure
- HTTP ์์ฒญ์ SSL ํน์ TLS ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ HTTP ํต์ ์ ํ๋ ๊ณผ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ฌ ์ ์ก
- HTTP ํ๋กํ ์ฝ ๋ด์ฉ์ ์ํธํ๋ฅผ ํตํด ๋ณด์์ฑ์ด ์ถ๊ฐ๋จ
- ์ ํํ ํค๊ฐ ์๋ค๋ฉด ๋ ธ์ถ์ด ๋๋๋ผ๋ ์ ์ ์์
โ ์ธ์ฆ์ : Certificate
- ๋ฐ์ดํฐ ์ ๊ณต์ ์ ์ ๋ณด์ฅ ๋ฐ ๋๋ฉ์ธ ์ข ์
- ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์ ์๋ต๊ณผ ์ธ์ฆ์๋ฅผ ํ์ธํ ์ ์์
- ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ์๋ฒ๊ฐ ์ ๋ง๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ ์๋ฒ์ธ์ง ์ธ์ฆ ๋ฐ ํ์ธํ๋ ์ฉ๋
- ์ธ์ฆ์ ๋ด์ฉ์ ์๋ฒ์ ๋๋ฉ์ธ ๊ด๋ จ ๋ด์ฉ์ด ์์ด์ ๋ฐ์ดํฐ ์ ๊ณต์์ ์ธ์ฆ์ ์ฉ์ดํ๊ฒ ํจ
- ์๋ฒ๊ฐ ์์ฒญ์ ๋ฐ๋๋ค๋ฉด ์ธ์ฆ์์ ํจ๊ป ์๋ต์ ์ ์กํจ
- ์๋ต์ ๋ฐ์ ํด๋ผ์ด์ธํธ๋ ์ธ์ฆ์์ ์์ฑ๋ ๋๋ฉ์ธ๊ณผ ์๋ต ๊ฐ์ฒด์ ์์ฑ๋ ๋๋ฉ์ธ์ ๋น๊ต
- ์ฆ ์ฐ๋ฆฌ๊ฐ Naver์ ์ ์ํ์ ๋ ํด์ปค๊ฐ ์ ๊ตํ๊ฒ ๋ฐ๋ผํ ๊ฐ์ง Naver๊ฐ ์๋์ ๋ณด์ฅ
โก CA
- ๊ณต์ธ ์ธ์ฆ์ ๋ฐ๊ธ ํด์ฃผ๋ ๊ณต์ธ๋ ๊ธฐ๊ฐ
- ๊ฐ ๋ธ๋ผ์ฐ์ ๋ ์ ๋ขฐํ๋ CA์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ ( ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ธ์ฆ์ ์ฐจ์ด ์์ )
- ์๋ฒ์ ์ ์์ ๋ณด์ฅํด์ฃผ๋ ์ 3์๋ฅผ CA๋ผ๊ณ ํจ
- ์๋ฒ์ ๊ณต๊ฐํค์ ์ ๋ณด๋ฅผ CA์ ๋น๋ฐํค๋ก ์ํธํํ์ฌ ์ธ์ฆ์ ๋ฐ๊ธํจ
- ์ธ์ฆ์๋ CA์ ๋น๋ฐํค๋ก ์ํธํ๋์ด ์์ผ๋ฏ๋ก CA์ ๊ฐ์ธํค๋ก ๋ณตํธํ ๊ฐ๋ฅํจ
โข ๋น๋์นญ ํค ์ํธํ
- ์ ํ ๋ค๋ฅธ ํค ํ ์์ผ๋ก ์ํธํ ๋ฐ ๋ณตํธํ ์งํ ๊ฐ๋ฅ
- ์ฆ, A ํค๋ก ์ํธํ ํ๋ค๋ฉด ๋ณตํธํ ํ ๋๋ A๊ฐ ์๋ ๋ค๋ฅธ ํค ํ์
โฃ ์ํธํ
- ์ 3์๊ฐ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฃผ๊ณ ๋ฐ๋ ์ ๋ณด๋ฅผ ํ์ทจํ ์ ์๋๋ก ํ๋ ๊ฒ
- ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ก ํฉ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ฌ ์ฃผ๊ณ ๋ฐ์
→ ์ 3์์๊ฒ ๋ฐ์ดํฐ๊ฐ ํ์ทจ๋์ด๋ ์๋ก๊ฐ ํฉ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ฌ ์ฃผ๊ณ ๋ฐ์
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ฌ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ๋น๋์นญํค์ ๋์นญํค ๋ฐฉ์ ํผ์ฉํด์ ์ฌ์ฉ
๐ก ๋์นญํค ๋ฐฉ์
: ์์ชฝ์ด ๊ณตํต์ ๋น๋ฐ ํค๋ฅผ ๊ณต์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ํธํ ๋ฐ ๋ณตํธํ ํ๋ ๊ฒ
- ์ปดํจํฐ์ ๋ถ๋ด์ ๋ ์ฃผ๊ธฐ ๋๋ฌธ์ ์ฃผ๋ก ์ฌ์ฉ
- But ๋์นญํค๋ฅผ ์๋ก ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์์ ๋ถํฐ ์ ๋ณด๊ฐ ํ์ทจ๋ ์ ์์
→ ์ํธํ์ ์ ๋ฌด์ ๊ด๊ผ์์ด ๋ชจ๋ ๋ฐ์ดํฐ ๋ณตํธํ ๊ฐ๋ฅ
๐ก ๋น๋์นญํค ๋ฐฉ์
: ๊ฐ๊ฐ ๊ณต๊ฐํค์ ๋น๋ฐํค๋ฅผ๊ฐ์ง๊ณ ์๋๊ฐ ๋์ ๊ณต๊ฐํค๋ก ์ํธํํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ธ์ด ๊ฐ์ง ๋น๋ฐํค๋ก ๋ณตํธํ ํ๋ ๊ฒ
- HTTPS๊ฐ ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์
- ์ค๊ฐ์ ๋์นญํค๊ฐ ํ์ทจ๋์ด๋ ๊ฐ์ธํค ์์ด๋ ๋ณตํธํํ ์ ์์
๋์นญํค | ๋น๋์นญํค | |
ํค๊ด๊ณ | ์ํธํ ํค = ๋ณตํธํ ํค | ์ํธํ ํค != ๋ณตํธํ ํค |
์ํธํ ํค | ๋น๋ฐ ํค | ๊ณต๊ฐ ํค |
๋ณตํธํ ํค | ๋น๋ฐ ํค | ๊ฐ์ธ ํค |
โธ ๊ณต๊ฐ ํค ? ์ฌ๋๋ค์๊ฒ ๊ณต๊ฐ๋ ํค์ด๋ฉฐ ์ ๋ณด๋ฅผ ์ํธํ ํ ์ ์์
โธ ๋น๋ฐ ํค ? ์ฌ์ฉ์๋ง ์๊ณ ์๋ ์ํธ๋ฅผ ํ ์ ์๋ ํค
๐ก TLS or SSL
: ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ CA๋ฅผ ํตํด ์๋ฒ๋ฅผ ์ธ์ฆํ๋ ๊ณผ์ ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๋ ๊ณผ์ ์ ์์ฐ๋ฅธ ํ๋กํ ์ฝ
๐น ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ํต์ ๊ณผ์
โธ Hand Shake
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก๋ฅผ ํ์ธ
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ๊ณต๊ฐํค ์ค์ ํ๋๋ฅผ ์ ๋ฌํจ
โธ ๋น๋ฐ ํค ์์ฑ
- ํด๋ผ์ด์ธํธ๋ ์ ๋ฌ๋ฐ์ ๊ณต๊ฐํค๋ฅผ ์ด์ฉํด์ ์๋ฒ์ ํค๋ฅผ ๋ง๋ค์ด ๋ผ ์์์ ์ ๋ณด๋ฅผ ์ํธํํด์ ์ ์ก
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์์ ์ ๋ณด๋ฅผ ์ํธํํด์ ์ ์ก
- ์๋ก ๋ง๋ค๊ณ ๊ตํํ ์์์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๋น๋ฐํค๋ฅผ ์์ฑ
โธ ์ํธ ํค ๊ฒ์ฆ
- ๊ฐ์ ์์ฑํ ํค๋ฅผ ๋ฐํ์ผ๋ก ํด๋ผ์ด์ธํธ๊ฐ ํ ์คํธ์ฉ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด ๋ธ ๋น๋ฐ ํค๋ก ์ํธํํด์ ์ ๋ฌ
๐น Java์ ์ธ์ฆ์ ํ์
โธ PKCS12 : Public Key Cryptographic Standards #12
- ์ฌ๋ฌ ์ธ์ฆ์์ ํค๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ ์ํธ๋ก ๋ณดํธ๋ ํ์
โธ JKS
- PKCS12์ ์ ์ฌํ๋ฉฐ ๋ ์ ํ์์ผ๋ก Javaํ๊ฒฝ์ผ๋ก๋ง ์ ํ๋จ
๐ Encryption : ์ํธํ
- ์ผ๋ จ์ ์ ๋ณด๋ฅผ ์์์ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํํ๋ก ๋ณํ
→ ํด๋น ๋ฐฉ์์ ๋ํ ์ ๋ณด๋ฅผ ์์ ํ ์ฌ๋์ ์ ์ธํ๊ณ ์ดํดํ ์ ์๋๋ก ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ์ ๋ณด ๊ด๋ฆฌ
shiftBy(content : "banana", offset : 2) // dcpcpc
shiftBy(content : "dcpcpc", offset : -2) // banana
โช๏ธ shiftBy( )
- ์ ๋ ฅ๋ฐ์ ๋ฌธ์์ด์ ์ ๋ ฅ๋ฐ์ ์ซ์์ ๊ฐ ๋งํผ ์ํ๋ฒณ ์์๋ฅผ ๊ฑด๋๋ด ๋ฌธ์๋ก ๋ณํํ์ฌ ์๋ก์ด ๋ฌธ์์ด ๋ฐํ
- ์ฆ ( a, 2 ) ๋ผ๋ฉด a ์์ ๋๋ฒ์ ์ํ๋ฒณ์ ๊ฑด๋ ๋ด c๊ฐ ๋ฐํ๋จ
๐ Hashing
- ์ด๋ ํ ๋ฌธ์์ด์ ์์์ ์ฐ์ฐ์ ์ ์ฉํ์ฌ ๋ค๋ฅธ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ฒ
โ ๋ชจ๋ ๊ฐ์ ๋ํด ํด์ ๊ฐ์ ๊ณ์ฐํ๋๋ฐ ์ค๋ ๊ฑธ๋ฆฌ์ง ์์์ผ ํจ
- ํด์ ๊ฐ์ ํด๋ ํ๋๋ฐ๋ ๋ง์ ์๊ฐ์ ๊ฑธ๋ฆฌ์ง๋ง ํด์ ๊ฐ์ ๋ง๋๋๋ฐ๋ ์ค๋ ๊ฑธ๋ฆฌ์ง ์์์ผ ํจ
- ํด์ ๊ฐ์ ๋ง๋๋๋ฐ 30์ด๊ฐ ๊ฑธ๋ฆฌ๋ฉด ๋ก๊ทธ์ธํ๋๋ฐ์๋ ์ต์ 30์ด๊ฐ ๊ฑธ๋ฆผ
โก ์ต๋ํ ํด์ ๊ฐ์ ํผํด์ผ ํ๋ฉฐ ๋ชจ๋ ๊ฐ์ ๊ณ ์ ํ ํด์ ๊ฐ์ ๊ฐ์ง
โข ์์ฃผ ์์ ๋จ์์ ๋ณ๊ฒฝ์ด๋ผ๋ ์์ ํ ๋ค๋ฅธ ํด์ ๊ฐ์ ๊ฐ์ ธ์ผ ํจ
๐ธ Salt
- ์ํธํ ํด์ผ ํ๋ ๊ฐ์ ์ด๋ค ๋ณ๋์ ๊ฐ์ ์ถ๊ฐํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณํํ๋ ๊ฒ
โ ์ํธํ๋ง ํด๋๋๋ค๋ฉด ํด์๊ฒฐ๊ณผ๊ฐ ํญ์ ๋์ผ
- ํด์๋ ๊ฐ๊ณผ ์๋ ๊ฐ์ ํ ์ด๋ธ์ ๋ ์ธ๋ณด์ฐ ํ ์ด๋ธ๋ก ๋ง๋ค์ด decoding ํด๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๋ ์๊น
โก ์๋ณธ ๊ฐ์ ์์๋ก ์ฝ์๋ ๋ณ๋์ ๋ฌธ์์ด์ ์ถ๊ฐํ์ฌ ํด์ ์งํํ๋ค๋ฉด ๊ธฐ์กด ํด์๊ฐ๊ณผ ์ ํ ๋ค๋ฅธ ํด์ ๊ฐ ๋ฐํ
- ์๊ณ ๋ฆฌ์ฆ์ด ๋ ธ์ถ ๋๋๋ผ๋ ์๋ณธ ๊ฐ์ ๋ณดํธํ ์ ์๋๋ก ํ๋ ์์ ์ฅ์น๊ฐ ๋จ
๐ Cookie
: ์๋ฒ์์ ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ ์ค ํ๋
→ ์๋ฒ๊ฐ ์ํ๋ฉด ํด๋ผ์ด์ธํธ์์ ์ฟ ํค๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์
- ์ด๋ค ์น ์ฌ์ดํธ์ ๋ค์ด๊ฐ์ ๋, ์๋ฒ๊ฐ ์ผ๋ฐฉ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๋ ์์ ๋ฐ์ดํฐ
- ์๋ฒ๊ฐ ์น ๋ธ๋ผ์ฐ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ฌ ์ ์๋ ์๋จ
- ํด๋น ๋๋ฉ์ธ์ ๋ํด ์ฟ ํค๊ฐ ์กด์ฌํ๋ฉด ์น ๋ธ๋ผ์ฐ์ ๋ ๋๋ฉ์ธ์๊ฒ http ์์ฒญ์ ์ฟ ํค๋ฅผ ํจ๊ป ์ ๋ฌ
๐ก ์๋ฒ๋ ์ฟ ํค๋ฅผ ํตํด ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค๊ณ ํ ๊น ?
: ์ฟ ํค๋ ์ญ์ ํ์ง ์๋๋ค๋ฉด ์ฌ๋ผ์ง์ง ์๋๋ค !
→ ์ฅ๊ธฐ๊ฐ ์ ์ฅํด์ผ ํ๋ ์ต์ (ex. ๋ก๊ทธ์ธ ์ํ ์ ์ง ๋ฑ)์ ์ ์ฅํ๊ธฐ์ ์ ํฉ
๐ก ์ฟ ํค๋ฅผ ์ด์ฉํ ์ํ ์ ์ง
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ด์ ์ฟ ํค ์ ์ก + ํด๋ผ์ด์ธํธ๋ ์ ๋ฌ๋ฐ์ ์ฟ ํค๋ฅผ ์์ฒญ๊ณผ ๊ฐ์ด ์ ์ก
= Statelessํ ์ธํฐ๋ท ์ฐ๊ฒฐ์ Stateful ํ๊ฒ ์ ์ง ๊ฐ๋ฅ
๐น Cookie์ ์ต์
โธ Domain
: ์๋ฒ์ ์์ฒญ์ ๋๋ฉ์ธ์ด ์ผ์นํ๋ ๊ฒฝ์ฐ ์ฟ ํค ์ ์ก
- ๋๋ฉ์ธ์ www.google.com๊ณผ ๊ฐ์ด ์๋ฒ์ ์ ์ํ ์ ์๋ ์ด๋ฆ
→ ๋๋ฉ์ธ์ ํฌํธ๋ฒํธ(3000), ์๋ธ๋๋ฉ์ธ ์ ๋ณด(www), ์ธ๋ถ ๊ฒฝ๋ก(users/login)๋ฅผ ํฌํจํ์ง ์์
- http://www.localhost.com:3000/users/login ์ด๋ผ๊ณ ํ๋ฉด ๋๋ฉ์ธ์ localhost.com
โธ Path
: ์๋ฒ์ ์์ฒญ์ ์ธ๋ถ๊ฒฝ๋ก๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ ์ฟ ํค ์ ์ก
- ์ธ๋ถ ๊ฒฝ๋ก๋ ์๋ฒ๊ฐ ๋ผ์ฐํ ํ ๋ ์ฌ์ฉํ๋ ๊ฒฝ๋ก
โธ MaxAge or Expires
: ์ฟ ํค์ ์ ํจ๊ธฐ๊ฐ ์ค์
- ์ฟ ํค๊ฐ ์์ํ ๋จ์์๋ค๋ฉด ๊ทธ๋งํผ ํ์ทจ๋๊ธฐ๋ ์ฌ์์ง๊ธฐ ๋๋ฌธ์ ์ ํจ๊ธฐ๊ฐ ์ค์ ํ๋ ๊ฒ์ ๋ณด์ ์ธก๋ฉด์์ ์ค์
- PC๋ฐฉ์์ ๋ก๊ทธ์์์ ์ํ์ ๋ ์๋ฒ์์ ์ฟ ํค์ MaxAge or Expires ์ต์ ์ ํตํด ์ ํจ ๊ธฐ๊ฐ ์ง์ → ์ผ์ ์๊ฐ ํ ์๋ ์๋ฉธ
- MaxAge : ์์ผ๋ก ๋ช ์ด ๋์ ์ฟ ํค๊ฐ ์ ํจํ์ง ์ค์
- Expires : MaxAge์ ๋น์ทํ์ง๋ง ์ธ์ ๊น์ง ์ ํจํ์ง Date ์ง์ ( ํด๋ผ์ด์ธํธ ์๊ฐ ๊ธฐ์ค )
โช๏ธ ์ธ์ ์ฟ ํค
- MaxAge ๋๋ Expires ์ต์ ์ด ์๋ ์ฟ ํค
- ๋ธ๋ผ์ฐ์ ๊ฐ ์คํ์ค์ผ ๋ ์ฌ์ฉํ ์ ์๋ ์์ ์ฟ ํค
- ๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃ๋๋ฉด ํด๋น ์ฟ ํค๋ ์ญ์ ๋จ
โช๏ธ ์์์ฑ ์ฟ ํค
- ๋ธ๋ผ์ฐ์ ์ ์ข ๋ฃ ์ฌ๋ถ์ ์๊ด์์ด MaxAge / Expires์ ์ง์ ๋ ์ ํจ์๊ฐ๋งํผ ์ฌ์ฉ ๊ฐ๋ฅ
โธ HttpOnly
: ์คํฌ๋ฆฝํธ์ ์ฟ ํค ์ ๊ทผ ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒฐ์
- ํด๋น ์ต์ ์ด true์ด๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ฟ ํค์ ์ ๊ทผ ๋ถ๊ฐ (๊ธฐ๋ณธ๊ฐ false)
- ์คํฌ๋ฆฝํธ ์ฟ ํค ์ ๊ทผ์ ๋ง๊ณ ๋ธ๋ผ์ฐ์ ๋ง ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํ ์ ์์
- ์คํฌ๋ฆฝํธ ํ๊ทธ๋ก ์ ๊ทผ ํ ์ ์๋๋ฐ ์ด ๊ฒฝ์ฐ XSS ๊ณต๊ฒฉ์ ์ทจ์ฝํจ
โธ Secure
: HTTPS ํ๋กํ ์ฝ์์๋ง ์ฟ ํค ์ ์ก ์ฌ๋ถ ๊ฒฐ์
- ์ฟ ํค๋ฅผ ์ ์กํ ๋ ์ฌ์ฉํด์ผ ํ๋ ํ๋กํ ์ฝ์ ๋ฐ๋ฅธ ์ฟ ํค์ ์ก ์ฌ๋ถ ๊ฒฐ์
- ํด๋น ์ต์ ์ด true ๋ผ๋ฉด HTTPS๋ง ๊ฐ๋ฅ
- Secure ์ต์ ์ด ์๋ค๋ฉด HTTP, HTTPS ๋ ๋ค ๊ฐ๋ฅ
โธ SameSite
: CORS (Cross-Origin) ์์ฒญ์ ๋ฐ์ ๊ฒฝ์ฐ ์ฌ์ฉํ ๋ฉ์๋์ ํด๋น ์ต์ (GET, POST, PUT, PATCH, .. )์ ์กฐํฉ์ผ๋ก
์๋ฒ์ ์ฟ ํค ์ ์ก ์ฌ๋ถ ๊ฒฐ์
- ๊ฐ์ ์ฌ์ดํธ์์๋ง ์ฟ ํค๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ์ค์
- SameSite๋ ์์ฒญ์ ๋ณด๋ธ Origin๊ณผ ์๋ฒ์ ๋๋ฉ์ธ, ํ๋กํ ์ฝ, ํฌํธ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ๋งํจ
→ ์ด ์ค ํ๋๋ผ๋ ๋ค๋ฅด๋ค๋ฉด Cross-Origin์ผ๋ก ๊ตฌ๋ถํจ
โ Lax : GET ๋ฉ์๋ ์์ฒญ์๋ง ์ฟ ํค ์ ์ก ๊ฐ๋ฅ
โก Strict : ์ฟ ํค ์ ์ก ๋ถ๊ฐ
โข None : ๋ชจ๋ ๋ฉ์๋ ์์ฒญ์ ๋ํด ์ฟ ํค ์ ์ก ๊ฐ๋ฅ
→ None ์ต์ ์ Secure ์ฟ ํค ์ต์ ๊ณผ HTTPS ํ๋กํ ์ฝ ์ฌ์ฉํด์ผ ์์
๐Session
- ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ ์ผํ๊ณ ์ํธํ๋ ID๋ฅผ ๋ถ์ฌ
- ์ค์ ๋ฐ์ดํฐ๋ ์๋ฒ์์ ๊ด๋ฆฌ
๐ก ์ฟ ํค์ ์ธ์ ์ ์ฐจ์ด๋ ?
โธ ์ฟ ํค
- Http์ Statelessํ ๊ฒ์ ๋ณด์ํด์ฃผ๋ ๋๊ตฌ
- ์ ์ฅ ๊ฒฝ๋ก : ํด๋ผ์ด์ธํธ
- ์ฅ์ : ์๋ฒ์ ๋ถ๋ด์ ๋์ด์ค (ํด๋ผ์ด์ธํธ์ ์ ์ฅํ๋๊น)
- ๋จ์ : ์ฟ ํค ๊ทธ ์์ฒด๋ ์ธ์ฆ์ด ์๋
โธ ์ธ์
- ์ ์ ์ํ์ ๊ถํ ๋ถ์ฌ๋ฅผ ์ํด ์ธ์ ์์ด๋๋ฅผ ์ฟ ํค๋ก ์ ์ก
- ์ ์ฅ ๊ฒฝ๋ก : ์๋ฒ
- ์ฅ์ : ์ ๋ขฐํ ์ ์๋ ์ ์ ์ธ์ง ์๋ฒ์์ ์ถ๊ฐ๋ก ํ์ธ ๊ฐ๋ฅ
- ๋จ์ : ํ๋์ ์๋ฒ์์๋ง ์ ์ ์ํ๋ฅผ ๊ฐ์ง๋ฏ๋ก ๋ถ์ฐ ๋ถ๋ฆฌ
๐ธ ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ - ๋ก๊ทธ์ธ
: ์ธ์ฆ์ ๋ฐ๋ผ ์ ๊ทผ ๊ถํ์ด ๋ฌ๋ผ์ง
- ์๋ฒ : ์ฌ์ฉ์๊ฐ ์ธ์ฆ์ ์ฑ๊ณตํ์์ ์๊ณ ์์ด์ผ ํจ
- ํด๋ผ์ด์ธํธ : ์ธ์ฆ ์ฑ๊ณต์ ์ฆ๋ช ํ ์๋จ์ ๊ฐ๊ณ ์์ด์ผ ํจ
โ ์ธ์ : ์ฌ์ฉ์๊ฐ ์ธ์ฆ์ ์ฑ๊ณตํ ์ํ
- ์๋ฒ๋ ์ผ์ข ์ ์ ์ฅ์์ ์ธ์ ์ ์ ์ฅํจ
โก ์ธ์ ID : ๊ฐ ์ธ์ ์ ๊ตฌ๋ถ
- ์ธ์ ์ด ๋ง๋ค์ด์ง๋ฉด ๊ฐ ์ธ์ ์ ๊ตฌ๋ถํ ์ธ์ ์์ด๋ ์์ฑ๋จ
- ๋ณดํต ํด๋ผ์ด์ธํธ์ ์ธ์ ์ฑ๊ณต์ ์ฆ๋ช ํ ์๋จ์ผ๋ก ์ธ์ ์์ด๋ ์ ๋ฌ
โข ์ฟ ํค ์ฌ์ฉ : ๋ก๊ทธ์ธ์ ์ ์งํ๊ธฐ ์ํ ์๋จ์ผ๋ก ์ฌ์ฉ
- ์ฟ ํค์๋ ์๋ฒ์์ ๋ฐ๊ธํ ์ธ์ ์์ด๋๋ฅผ ์ ์ฅํจ
๐ธ ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ - ๋ก๊ทธ์์
- ์ธ์ ์์ด๋๊ฐ ๋ด๊ธด ์ฟ ํค๋ ํด๋ผ์ด์ธํธ์, ์ธ์ ์ ์๋ฒ์ ์ ์ฅ
- ์๋ฒ๋ ์ธ์ ์์ด๋๋ก๋ง ์ธ์ฆ ์ฌ๋ถ ํ๋จ
- ์๋ฒ : ์ธ์ ์ ๋ณด๋ฅผ ์ญ์ ํด์ผ ํจ
- ํด๋ผ์ด์ธํธ : ์ฟ ํค๋ฅผ ๊ฐฑ์ ํด์ผ ํจ
๐ก Web Application Security
- ๊ฐ๋ฐ์๋ค์ด ์น ์ฌ์ดํธ, ๋ชจ๋ฐ์ผ ์ดํ, ์น API ๋ฑ์ ๋ง๋ค ๋ ํด์ปค๋ค์ ๊ณต๊ฒฉ์ ๋ง๊ธฐ ์ํ ํ์ ๋ณด์ ์ฌํญ
๐ ์น ๋ณด์ ๊ณต๊ฒฉ
๐๐ป SQL Injection
: ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์์์ SQL๋ฌธ์ ์คํํ ์ ์๋๋ก ๋ช ๋ น์ด๋ฅผ ์ฝ์ ํ๋ ๊ณต๊ฒฉ
- ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ณด์์์ ํ์ ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅด ๋น์ ์์ ์ผ๋ก ์กฐ์
→ ์ด๋ก ์ธํด ๊ธฐ๋ก์ด ์ญ์ ๋๊ฑฐ๋ ๋ฐ์ดํฐ ์ ์ถ ๊ฐ๋ฅ
(1) ๊ณต๊ฒฉ์๊ฐ ์
์์ ์ธ SQL๋ฌธ์ ๋ฃ์ด ์๋ฒ์ ์ ์ก
(2) ์๋ฒ์ ํด๋น SQL๋ฌธ์ ๊ธฐ์กด SQL์ ์ฝ์
ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋
id = '{์ฌ์ฉ์ ID}' → id = '{์ฌ์ฉ์ ID}' OR '1'='1'
(3) ID ๊ฒ์ฆ ์ฌ๋ถ์ ์๊ด์์ด '1' = '1'์ ์ฐธ์ด๋ฏ๋ก ๋ชจ๋ ์ฌ์ฉ์ ์ ๋ณด ๋ฐํ
(4) ๋ชจ๋ ์ฌ์ฉ์์ ์ ๋ณด๊ฐ ๊ณต๊ฒฉ์์๊ฒ ์ ์ก
โช๏ธ SQL Injection ๋์ ๋ฐฉ์
โ ์ ๋ ฅ (์์ฒญ) ๊ฐ ๊ฒ์ฆ
- ํ์ดํธ ๋ฆฌ์คํธ ๋ฐฉ์์ผ๋ก ํด๋น ํค์๋๊ฐ ๋ค์ด์ค๋ฉด ๋ค๋ฅธ ๊ฐ์ผ๋ก ์นํ
โธ ํ์ดํธ ๋ฆฌ์คํธ ? ๊ธฐ๋ณธ ์ ์ฑ ์ด ๋ชจ๋ ์ฐจ๋จ์ธ ์ํฉ์์ ์์ธ์ ์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ ๋์ ์ง์
โก Prepared Statement ๊ตฌ๋ฌธ ์ฌ์ฉ
- Prepared Statement ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์์ ์ ๋ ฅ์ด SQL๋ฌธ์ผ๋ก๋ถํฐ ๋ถ๋ฆฌ
- ์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ์ด ์ ๋ฌ๋๊ธฐ ์ ์ DB๊ฐ ๋ฏธ๋ฆฌ ์ปดํ์ผํ์ฌ SQL์ ๋ฐ๋ก ์คํํ์ง ์๊ณ ๋๊ธฐ
→ ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ ๋จ์ ํ ์คํธ๋ก ์ธ์
โข Error Message ๋ ธ์ถ ๊ธ์ง
- ๊ณต๊ฒฉ์๋ DB์ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ํตํด ํ ์ด๋ธ์ด๋ ์ปฌ๋ผ ๋ฑ์ ์ ๋ณด๋ฅผ ์ป์ ์ ์์
๐๐ป CSRF : Cross Site Request Forgery
- ์ฃผ์๊ฐ ๋ค๋ฅธ ์ฌ์ดํธ์์ ์์ฒญ์ ์กฐ์ํ๋ ๊ฒ
→ ์ด๋ฉ์ผ์ ์ฒจ๋ถ๋ ๋งํฌ๋ฅผ ๋๋ฅด๋ฉด ์ํ ์ชฝ์ผ๋ก ์์ฒญ์ ๋ณด๋ด์ ๋ด ์ํ ๊ณ์ข์ ๋์ด ๋น ์ ธ๋๊ฐ
- ํด์ปค๊ฐ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ ์ ์์
→ ๋ค๋ฅธ ์ค๋ฆฌ์ง์ด๊ธฐ ๋๋ฌธ์ response์ ์ง์ ์ ๊ทผํ ์ ์์
์ค๋ฆฌ์ง : https://localhost.com:80
๋๋ฉ์ธ : localhost.com
โช๏ธ CSRF๊ฐ ์๋ํ๊ธฐ ์ํ ์กฐ๊ฑด
โ ์ฟ ํค๋ฅผ ์ฌ์ฉํ ๋ก๊ทธ์ธ
- ์ ์ ๊ฐ ๋ก๊ทธ์ธ ํ์ ๋ ์ฟ ํค๋ก ์ด๋ค ์ ์ ์ธ์ง ์ ์ ์์ด์ผ ํจ
โก ์์ธกํ ์ ์๋ ์์ฒญ, ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผํจ
- Request์ ํด์ปค๊ฐ ๋ชจ๋ฅผ ์ ์๋ ์ ๋ณด๊ฐ ๋ด๊ฒจ์์ผ๋ฉด X
โช๏ธ CSRF๋ฅผ ๋ง๊ธฐ ์ํด์๋
โ CSRF ํ ํฐ ์ฌ์ฉ
- ์๋ฒ์ธก์์ CSRF ๊ณต๊ฒฉ์ ๋ณดํธํ๊ธฐ ์ํ ํ ํฐ ๋ฌธ์์ด์ ์ ์ ์ ๋ธ๋ผ์ฐ์ ์ ์น ์ฑ์๋ง ์ ๊ณต
- ์ด ์กฐํฉ์ผ๋ก๋ง ์์ฑ๋ ์์ฒญ์๋ง ์ฑ๊ณต์ ์ผ๋ก ์์ฒญ ์ฒ๋ฆฌํด์ค
โก Same - Site Cookie ์ฌ์ฉ
- ๊ฐ์ ๋๋ฉ์ธ์์๋ง ์ธ์ / ์ฟ ํค ์ฌ์ฉ ๊ฐ๋ฅ
- ๊ฐ์ ๋๋ฉ์ธ์์ ์จ ์์ฒญ์ด ์๋๋ผ๋ฉด ๋ฐ์์ฃผ์ง ์์
๐๐ป XSS
- ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ : XSS ( Cross Site Scripting )
- ๊ณต๊ฒฉ์๊ฐ ์๋๋ฐฉ์ ๋ธ๋ผ์ฐ์ ์ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋๋ก ํ์ฌ
์ฌ์ฉ์์ ์ธ์ ์ ๊ฐ๋ก์ฑ๊ฑฐ๋ ์น์ฌ์ดํธ ๋ณ์กฐ, ์ ์์ ์ธ ์ฝํ ์ธ ์ฝ์ , ํผ์ฑ ๊ณต๊ฒฉ์ ์งํํ๋ ๊ฒ