728x90
SOP(Same Origin Policy)
- κ°μ μΆμ²μ HTTP μμ²λ§μ νλ½νλ μ μ±
- μμμ μμ²ν μΆμ²μ ν΄λΉ μμ²μ μλ΅νλ μλ²μ μΆμ²κ° λ€λ₯Ό κ²½μ° ν΄λΉ μμμ μ¬μ©νμ§ λͺ»νλλ‘ μ ν -> CORS μ μ± μ μ§μΌ°μ μμλ§ μμΈμ μΌλ‘ νμ©
- SOP μ μ±
μ΄ μμ μ λ
ΈμΆλ μμ€μ½λλ₯Ό ν΅ν΄
CSRF(Cross-Site Request Forgery)
λXSS(Cross-Site Scripting)
μ κ°μ λ°©λ²μΌλ‘ 곡격μμ μ¬μ©μ μ 보 νμ·¨ μνμ΄ μμ
β» μΆμ²(Origin)λ?
μμ κ°μ URL ꡬ쑰μμ Protocol + Host + Port
μ ν΄λΉνλ λΆλΆμ λ»νλ€. λΈλΌμ°μ λ Protocol, Host, Portκ° λͺ¨λ κ°λ€λ©΄ κ°μ μΆμ², μ
μ€ νλλΌλ λ€λ₯΄λ€λ©΄ λ€λ₯Έ μΆμ²λΌκ³ νλ¨νλ€.
CORS(Cross-Origin Reource Sharing)
- κ΅μ°¨ μΆμ²(λ€λ₯Έ μΆμ²) 리μμ€ κ³΅μ
- μλ²μΈ‘μμ CORS ν€λλ₯Ό ν΅ν΄μ λ€λ₯Έ μΆμ²(μΉ)μμ μμμ μ κ·Όν μ μλ κΆνμ λΆμ¬νλλ‘ λΈλΌμ°μ μκ² μλ €μ£Όλ μ μ±
- μΆμ²κ° λ€λ₯Έ μμ²μ΄λλΌλ CORS ν€λλ₯Ό ν΅ν΄ CORS μ μ± μ μ μ§μΌ°λ€λ©΄ μ λλ‘ μλ΅νλλ‘ νμ©
CORS λμ λ°©μ (CORS μλ° μ¬λΆ νμΈ λ°©λ²)
- μΉ ν΄λΌμ΄μΈνΈ μ ν리μΌμ΄μ μ HTTP νλ‘ν μ½μ ν΅ν΄ λ€λ₯Έ μΆμ²μ 리μμ€ μμ²
- λΈλΌμ°μ λ μμ² ν€λμ
Origin
μ΄λΌλ νλμ μμ²μ 보λ΄λ μΆμ²λ₯Ό μΆκ°λ‘ λ΄μμ 보λ - μλ²λ μλ΅ ν€λμ
Access-Control-Allow-Origin(리μμ€μ μ κ·Όμ΄ νμ©λ μΆμ²)
λ₯Ό λ΄μμ 보λ - λΈλΌμ°μ λ μμ² μ 보λΈ
Origin
κ³Ό μλ΅ ν€λ μμAccess-Control-Allow-Origin
μ λΉκ΅Access-Control-Allow-Originμ Origin
μ΄ ν¬ν¨λλ€λ©΄ ν΄λΌμ΄μΈνΈλ‘ μλ΅ μ μ‘- ν¬ν¨λμ§ μλλ€λ©΄ λΈλΌμ°μ λ ν΄λΉ μλ΅μ λ²λ¦¬κ³ CORS μ μ± μλ° λ©μμ§λ₯Ό consoleμ μΆλ ₯
CORS μλ리μ€
CORSμ ꡬ체μ μΈ λμ λ°©μμ μλ μΈ κ°μ§μ μλ리μ€μ λ°λΌ λ³κ²½λλ€. μμ²μ΄ μ΄λ€ μλ리μ€λ₯Ό λ°λ₯΄λ μ§μ λ°λΌ ν΄κ²° λ°©λ²λ λ¬λΌμ§λ€.
1. Preflight Request
- λΈλΌμ°μ λ μμ²μ νλ²μ 보λ΄μ§ μκ³ μλΉ μμ²(prefight)κ³Ό λ³Έ μμ²μΌλ‘ λλμ΄ λ λ² μμ² μ μ‘
- μλΉ μμ²μλ HTTP λ©μλ μ€
OPTIONS
λ©μλ μ¬μ© - λΈλΌμ°μ λ μλΉ μμ²μΌλ‘ ν΅ν΄ λ³Έ μμ²μ΄ μμ νκ² μ λ¬λ μ μμ μ§ μ€μ€λ‘ νμΈ
- Javascriptμ Fetch API λ±μ νμ©ν΄ λΈλΌμ°μ μκ² λ¦¬μμ€λ₯Ό λ°μμ€λΌλ λͺ λ Ήμ 보λ
- μ΄μ λν΄ λΈλΌμ°μ λ μλ²μκ² λ―Έλ¦¬ μλΉ μμ²μ 보λ
- μλ²λ μ΄μ λν μλ΅ ν€λμ νμ¬ μμ μ΄ μ΄λ€ κ²(λ©μλ/ν€λ)λ₯Ό νμ©νκ³ μ΄λ€ κ²μ κΈμ§νλμ§μ λν μ 보λ₯Ό λ΄μ μ μ‘
- λΈλΌμ°μ λ μμ μ΄ λ³΄λΈ μλΉ μμ²κ³Ό μλ΅ ν€λμ νμ© μ μ± μ λΉκ΅ν ν ν΄λΉ μμ²μ΄ μμ νλ€κ³ νλ¨λλ©΄ κ°μ μμ²(λ³Έ μμ²)μ λ€μ 보λ
2. Simple Request
- μλΉ μμ²μ 보λ΄μ§ μκ³ μλ²μκ² λ°λ‘ λ³Έ μμ²μ μ μ‘ν ν μλ²κ° μ΄μλν μλ΅ ν€λμ
Access-Control-Allow-Origin
μ 보λ΄λ©΄ μ΄λ λΈλΌμ°μ κ° CORS μ μ± μλ° μ¬λΆλ₯Ό κ²μ¬νλ λ°©μ - Prefight Requestμ μ μ¬νμ§λ§ μλΉ μμ² μ λ¬΄λ§ λ€λ¦
- μλΉ μμ²μ μλ΅ν μ μλ κ²½μ°λ μ ν΄μ Έ μμ
- μμ² λ©μλλ
GET
,HEAD
,POST
μ€ νλμ¬μΌ ν¨ Accept
,Accept-Language
,Content-Language
,Content-Type
,DPR
,Downlink
,Save-Data
,Viewport-Width
,Width
λ₯Ό μ μΈν ν€λλ μ¬μ©νλ©΄ μλ¨- λ§μ½
Content-Type
λ₯Ό μ¬μ©νλ€λ©΄application/x-www-form-urlencoded
,multipart/form-data
,text/plain
λ§ νμ©
- μμ² λ©μλλ
3. Credentialed Request
- μΈμ¦λ μμ²μ μ¬μ©νλ λ°©λ²
- λ€λ₯Έ μΆμ² κ° ν΅μ μμ μ’ λ 보μμ κ°ννκΈ° μν΄ μ¬μ©
credentials
μ΄λΌλ μ΅μ μ ν΅ν΄ μμ² ν€λμ μΈμ¦κ³Ό κ΄λ ¨ν μ 보λ₯Ό λ΄μ μ μλλ‘ ν¨same-origin(κΈ°λ³Έκ°)
: κ°μ μΆμ² κ° μμ²μλ§ μΈμ¦ μ 보λ₯Ό λ΄μ μ μλ€include
: λͺ¨λ μμ²μ μΈμ¦ μ 보λ₯Ό λ΄μ μ μλ€omit
: λͺ¨λ μμ²μ μΈμ¦ μ 보λ₯Ό λ΄μ§ μλλ€
credentials
μ΅μ μsame-origin
μ΄λinclude
μ κ°μ μ΅μ μ μ¬μ©νμ¬ μΈμ¦ μ λ³΄κ° ν¬ν¨λμλ€λ©΄ λΈλΌμ°μ λ λ€λ₯Έ μΆμ²μ 리μμ€ μμ² μAccess-Control-Allow-Origin
νμΈ λΏλ§ μλλΌ μΆκ°μ μΈ κ²μ¬ 쑰건μ μΆκ°- μλ² μλ΅ ν€λμλ
Access-Control-Allow-Origin
μ κ°μΌλ‘ μμΌλμΉ΄λ(*)λ₯Ό μ¬μ©ν μ μμΌλ©° λͺ μμ μΈ URLμ μμ±ν΄μΌνλ€ - μλ² μλ΅ν€λμ
Access-Control-Allow-Credentials
λΌλ ν€λμ κ·Έ κ°μ trueλ‘ μ€μ λμ΄ μμ΄μΌνλ€
- μλ² μλ΅ ν€λμλ
CORS ν΄κ²° λ°©λ²
- μλ²μμ
Access-Control-Allow-Origin
μΈν νκΈ°Access-Control-Allow-Origin: \*
λ λͺ¨λ μΆμ²μμ μ€λ μμ²μ νμ©νλ€λ λ»μΌλ‘ λΉμ₯μ νΈν μ§λΌλ 보μμ μ’μ§ μμAccess-Control-Allow-Origin: https://J1Yun.github.com
κ³Ό κ°μ΄ νμ© μΆμ²λ₯Ό λͺ νν μ μ΄μ£Όλ κ²μ΄ μ’μ
- νλ‘ νΈμμ
Webpack Dev Server
λ‘ λ¦¬λ²μ€ νλ‘μ±νκΈ°- μΉν©κ³Ό
webpack-dev-server
μμ μ 곡νλ νλ‘μ κΈ°λ₯μ νμ©νμ¬ CORS μ μ± μ°ν
- μΉν©κ³Ό
728x90