μ μΈκ³μ μμ ν μΉ μ ν리μΌμ΄μ ꡬμΆμ μν μΈμ κ΄λ¦¬ 보μμ λͺ¨λ² μ¬λ‘, μΌλ°μ μΈ μ·¨μ½μ λ° μν μ λ΅μ λ€λ£¨λ μ’ ν© κ°μ΄λμ λλ€.
μΈμ κ΄λ¦¬: κΈλ‘λ² μ ν리μΌμ΄μ μ μν 보μ κ³ λ € μ¬ν
μΈμ κ΄λ¦¬λ μΉ μ ν리μΌμ΄μ 보μμ μ€μν μΈ‘λ©΄μ λλ€. μΈμ κ΄λ¦¬λ μ¬μ©μμ μΉ μ ν리μΌμ΄μ κ°μ μνΈμμ© κΈ°κ°μΈ μ¬μ©μ μΈμ μ κ΄λ¦¬νλ κ²μ ν¬ν¨ν©λλ€. μ ꡬνλ μΈμ κ΄λ¦¬ μμ€ν μ μΈμ¦λ μ¬μ©μλ§ λ³΄νΈλ 리μμ€μ μ κ·Όν μ μλλ‘ λ³΄μ₯νκ³ , μΈμ λ΄λ΄ μ¬μ©μμ λ°μ΄ν°κ° 보νΈλλλ‘ ν©λλ€. μ΄λ λ€μν μ§λ¦¬μ μμΉμ κ·μ νκ²½μ κ±Έμ³ λ―Όκ°ν μ¬μ©μ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ κΈλ‘λ² μ ν리μΌμ΄μ μ νΉν μ€μν©λλ€.
μΈμ κ΄λ¦¬λ 무μμΈκ°?
μΈμ κ΄λ¦¬λ μ¬λ¬ μμ²μ κ±Έμ³ μΉ μ ν리μΌμ΄μ κ³Ό μ¬μ©μ μνΈμμ©μ μνλ₯Ό μ μ§νλ νλ‘μΈμ€μ λλ€. HTTPλ μν λΉμ μ₯(stateless) νλ‘ν μ½μ΄λ―λ‘, μΌλ ¨μ μμ²μ νΉμ μ¬μ©μμ μ°κ²°νκΈ° μν΄ μΈμ κ΄λ¦¬ λ©μ»€λμ¦μ΄ νμν©λλ€. μ΄λ μΌλ°μ μΌλ‘ κ° μ¬μ©μ μΈμ μ κ³ μ ν μΈμ μλ³μ(μΈμ ID)λ₯Ό ν λΉνμ¬ μνλ©λλ€.
μΈμ IDλ μ΄νμ μμ²μμ μ¬μ©μλ₯Ό μλ³νλ λ° μ¬μ©λ©λλ€. μΈμ IDλ₯Ό μ μ‘νλ κ°μ₯ μΌλ°μ μΈ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€:
- μΏ ν€: μ¬μ©μμ λΈλΌμ°μ μ μ μ₯λλ μμ ν μ€νΈ νμΌμ λλ€.
- URL 리λΌμ΄ν : URLμ μΈμ IDλ₯Ό μΆκ°ν©λλ€.
- μ¨κ²¨μ§ νΌ νλ: HTML νΌμ μΈμ IDλ₯Ό μ¨κ²¨μ§ νλλ‘ ν¬ν¨ν©λλ€.
- HTTP ν€λ: μ¬μ©μ μ μ HTTP ν€λλ‘ μΈμ IDλ₯Ό μ μ‘ν©λλ€.
μμ ν μΈμ κ΄λ¦¬κ° μ€μν μ΄μ
μμ ν μΈμ κ΄λ¦¬λ μ¬μ©μ λ°μ΄ν°λ₯Ό 보νΈνκ³ μΉ μ ν리μΌμ΄μ μ λν λ¬΄λ¨ μ κ·Όμ λ°©μ§νλ λ° νμμ μ λλ€. μμλ μΈμ μ 곡격μκ° ν©λ²μ μΈ μ¬μ©μλ₯Ό μ¬μΉνμ¬ κ³μ , λ°μ΄ν° λ° κΆνμ μ κ·Όν μ μκ² ν©λλ€. μ΄λ λ€μκ³Ό κ°μ μ¬κ°ν κ²°κ³Όλ₯Ό μ΄λν μ μμ΅λλ€:
- λ°μ΄ν° μ μΆ: κ°μΈ λ°μ΄ν°, κΈμ΅ μ 보, κΈ°λ° λ¬Έμμ κ°μ λ―Όκ°ν μ¬μ©μ μ 보μ λν λ¬΄λ¨ μ κ·Ό.
- κ³μ νμ·¨: 곡격μκ° μ¬μ©μ κ³μ μ μ₯μ νμ¬ μ¬κΈ° κ±°λλ μ μ±μ½λ μ ν¬μ κ°μ μ μμ μΈ νλμ μν.
- νν μμ: 보μ μΉ¨ν΄λ νμ¬μ ννμ μμμμΌ κ³ κ° μ λ’°μ λΉμ¦λμ€ μμ€λ‘ μ΄μ΄μ§ μ μμ΅λλ€.
- μ¬μ μ μμ€: 보μ μΉ¨ν΄λ₯Ό μ²λ¦¬νλ λΉμ©μ λ²κΈ, λ²λ₯ λΉμ©, 볡ꡬ λΉμ© λ±μ ν¬ν¨νμ¬ μλΉν μ μμ΅λλ€.
μΌλ°μ μΈ μΈμ κ΄λ¦¬ μ·¨μ½μ
μ¬λ¬ μ·¨μ½μ μ΄ μΈμ κ΄λ¦¬ μμ€ν μ 보μμ μνν μ μμ΅λλ€. μ΄λ¬ν μ·¨μ½μ μ μΈμ§νκ³ μ μ ν μν μ λ΅μ ꡬννλ κ²μ΄ μ€μν©λλ€.
1. μΈμ νμ΄μ¬νΉ
μΈμ νμ΄μ¬νΉμ 곡격μκ° μ ν¨ν μΈμ IDλ₯Ό νλνμ¬ ν©λ²μ μΈ μ¬μ©μλ₯Ό μ¬μΉνλ κ²½μ°μ λ°μν©λλ€. μ΄λ λ€μκ³Ό κ°μ λ€μν λ°©λ²μΌλ‘ μ΄λ£¨μ΄μ§ μ μμ΅λλ€:
- ν¬λ‘μ€ μ¬μ΄νΈ μ€ν¬λ¦½ν (XSS): μΏ ν€μ μ μ₯λ μΈμ IDλ₯Ό νμΉ μ μλ μ μ± μ€ν¬λ¦½νΈλ₯Ό μΉμ¬μ΄νΈμ μ£Όμ ν©λλ€.
- λ€νΈμν¬ μ€λν: λ€νΈμν¬ νΈλν½μ κ°λ‘μ± μΌλ° ν μ€νΈλ‘ μ μ‘λλ μΈμ IDλ₯Ό μΊ‘μ²ν©λλ€.
- μ μ±μ½λ: μΈμ IDλ₯Ό νμΉ μ μλ μ μ±μ½λλ₯Ό μ¬μ©μ μ»΄ν¨ν°μ μ€μΉν©λλ€.
- μ¬ν 곡ν: μ¬μ©μλ₯Ό μμ¬ μΈμ IDλ₯Ό 곡κ°νλλ‘ μ λν©λλ€.
μμ: 곡격μκ° XSSλ₯Ό μ¬μ©νμ¬ ν¬λΌ μΉμ¬μ΄νΈμ μ€ν¬λ¦½νΈλ₯Ό μ£Όμ ν©λλ€. μ¬μ©μκ° ν¬λΌμ λ°©λ¬Ένλ©΄ μ€ν¬λ¦½νΈκ° μ¬μ©μμ μΈμ IDλ₯Ό νμ³ κ³΅κ²©μμ μλ²λ‘ μ μ‘ν©λλ€. κ·Έλ¬λ©΄ 곡격μλ νμΉ μΈμ IDλ₯Ό μ¬μ©νμ¬ μ¬μ©μ κ³μ μ μ κ·Όν μ μμ΅λλ€.
2. μΈμ κ³ μ
μΈμ κ³ μ μ 곡격μκ° μ¬μ©μμκ² μ΄λ―Έ μκ³ μλ μΈμ IDλ₯Ό μ¬μ©νλλ‘ μ λνλ κ²½μ°μ λ°μν©λλ€. μ΄λ λ€μκ³Ό κ°μ λ°©λ²μΌλ‘ μ΄λ£¨μ΄μ§ μ μμ΅λλ€:
- URLμ μΈμ ID μ 곡: 곡격μκ° μ¬μ©μμκ² νΉμ μΈμ IDκ° ν¬ν¨λ μΉμ¬μ΄νΈ λ§ν¬λ₯Ό 보λ λλ€.
- μΏ ν€λ₯Ό ν΅ν΄ μΈμ ID μ€μ : 곡격μκ° μ¬μ©μ μ»΄ν¨ν°μ νΉμ μΈμ IDκ° ν¬ν¨λ μΏ ν€λ₯Ό μ€μ ν©λλ€.
μ ν리μΌμ΄μ μ΄ μ μ ν κ²μ¦ μμ΄ λ―Έλ¦¬ μ€μ λ μΈμ IDλ₯Ό μλ½νλ©΄, 곡격μλ μμ μ΄ μ ν리μΌμ΄μ μ λ‘κ·ΈμΈνκ³ μ¬μ©μκ° λ‘κ·ΈμΈν λ μ¬μ©μμ μΈμ μ μ κ·Όν μ μμ΅λλ€.
μμ: 곡격μκ° μ¬μ©μμκ² μΈμ IDκ° ν¬ν¨λ μν μΉμ¬μ΄νΈ λ§ν¬λ₯Ό 보λ λλ€. μ¬μ©μλ λ§ν¬λ₯Ό ν΄λ¦νκ³ κ³μ μ λ‘κ·ΈμΈν©λλ€. μ΄λ―Έ μΈμ IDλ₯Ό μκ³ μλ 곡격μλ μ΄λ₯Ό μ¬μ©νμ¬ μ¬μ©μμ κ³μ μ μ κ·Όν μ μμ΅λλ€.
3. ν¬λ‘μ€ μ¬μ΄νΈ μμ² μμ‘° (CSRF)
CSRFλ 곡격μκ° μ¬μ©μκ° μΈμ¦λ μΉ μ ν리μΌμ΄μ μμ μλνμ§ μμ μμ μ μννλλ‘ μ λνλ κ²½μ°μ λ°μν©λλ€. μ΄λ μΌλ°μ μΌλ‘ λμ μΉ μ ν리μΌμ΄μ μ λν μμ²μ νΈλ¦¬κ±°νλ μ μ± HTML μ½λλ₯Ό μΉμ¬μ΄νΈλ μ΄λ©μΌμ μ½μ νμ¬ μ΄λ£¨μ΄μ§λλ€.
μμ: μ¬μ©μκ° μμ μ μ¨λΌμΈ λ± νΉ κ³μ μ λ‘κ·ΈμΈν΄ μμ΅λλ€. 곡격μλ μ¬μ©μμκ² μ μ± λ§ν¬κ° ν¬ν¨λ μ΄λ©μΌμ 보λ΄κ³ , μ¬μ©μκ° μ΄λ₯Ό ν΄λ¦νλ©΄ μ¬μ©μ κ³μ’μμ 곡격μ κ³μ’λ‘ λμ΄ μ΄μ²΄λ©λλ€. μ¬μ©μκ° μ΄λ―Έ μΈμ¦λμκΈ° λλ¬Έμ μν μ ν리μΌμ΄μ μ μΆκ° μΈμ¦ μμ΄ μμ²μ μ²λ¦¬ν©λλ€.
4. μμΈ‘ κ°λ₯ν μΈμ ID
μΈμ IDκ° μμΈ‘ κ°λ₯νλ€λ©΄, 곡격μλ μ ν¨ν μΈμ IDλ₯Ό μΆμΈ‘νμ¬ λ€λ₯Έ μ¬μ©μμ μΈμ μ μ κ·Όν μ μμ΅λλ€. μ΄λ μΈμ ID μμ± μκ³ λ¦¬μ¦μ΄ μ½νκ±°λ μμ°¨μ μ«μ λλ νμμ€ν¬νμ κ°μ μμΈ‘ κ°λ₯ν κ°μ μ¬μ©νλ κ²½μ° λ°μν μ μμ΅λλ€.
μμ: μΉμ¬μ΄νΈκ° μΈμ IDλ‘ μμ°¨μ λ²νΈλ₯Ό μ¬μ©ν©λλ€. 곡격μλ νμ¬ μΈμ IDλ₯Ό μ¦κ°μν€κ±°λ κ°μμμΌ λ€λ₯Έ μ¬μ©μμ μΈμ IDλ₯Ό μ½κ² μΆμΈ‘ν μ μμ΅λλ€.
5. URL λ΄ μΈμ ID λ ΈμΆ
URLμ μΈμ IDλ₯Ό λ ΈμΆνλ©΄ λ€μκ³Ό κ°μ λ€μν 곡격μ μ·¨μ½ν΄μ§ μ μμ΅λλ€:
- URL 곡μ : μ¬μ©μκ° λ¬΄μ¬μ½ μΈμ IDκ° ν¬ν¨λ URLμ λ€λ₯Έ μ¬λκ³Ό 곡μ ν μ μμ΅λλ€.
- λΈλΌμ°μ κΈ°λ‘: URLμ μΈμ IDκ° λΈλΌμ°μ κΈ°λ‘μ μ μ₯λμ΄ μ¬μ©μ μ»΄ν¨ν°μ μ κ·Όν μ μλ 곡격μμκ² λ ΈμΆλ μ μμ΅λλ€.
- 리νΌλ¬ ν€λ: URLμ μΈμ IDκ° λ¦¬νΌλ¬ ν€λλ₯Ό ν΅ν΄ λ€λ₯Έ μΉμ¬μ΄νΈλ‘ μ μ‘λ μ μμ΅λλ€.
μμ: μ¬μ©μκ° μΈμ IDκ° ν¬ν¨λ URLμ 볡μ¬νμ¬ μ΄λ©μΌμ λΆμ¬λ£κ³ λλ£μκ² λ³΄λ λλ€. λλ£λ ν΄λΉ μΈμ IDλ₯Ό μ¬μ©νμ¬ μ¬μ©μ κ³μ μ μ κ·Όν μ μμ΅λλ€.
6. μμ νμ§ μμ μΈμ μ μ₯
μΈμ IDκ° μλ²μ μμ νμ§ μκ² μ μ₯λλ©΄, μλ²μ μ κ·Όν 곡격μκ° μΈμ IDλ₯Ό νμ³ μ¬μ©μλ₯Ό μ¬μΉν μ μμ΅λλ€. μ΄λ μΈμ IDκ° λ°μ΄ν°λ² μ΄μ€λ λ‘κ·Έ νμΌμ μΌλ° ν μ€νΈλ‘ μ μ₯λ κ²½μ° λ°μν μ μμ΅λλ€.
μμ: μΉμ¬μ΄νΈκ° μΈμ IDλ₯Ό λ°μ΄ν°λ² μ΄μ€μ μΌλ° ν μ€νΈλ‘ μ μ₯ν©λλ€. 곡격μκ° λ°μ΄ν°λ² μ΄μ€μ μ κ·Όνμ¬ μΈμ IDλ₯Ό νμΉ©λλ€. κ·Έλ¬λ©΄ 곡격μλ νμΉ μΈμ IDλ₯Ό μ¬μ©νμ¬ μ¬μ©μ κ³μ μ μ κ·Όν μ μμ΅λλ€.
7. λΆμ μ ν μΈμ λ§λ£
μΈμ μ μ μ ν λ§λ£ λ©μ»€λμ¦μ΄ μμΌλ©΄ μ¬μ©μκ° λ‘κ·Έμμνκ±°λ λΈλΌμ°μ λ₯Ό λ«μ νμλ 무기ν νμ± μνλ‘ λ¨μ μμ μ μμ΅λλ€. μ΄λ 곡격μκ° λ§λ£λ μΈμ IDλ₯Ό μ¬μ©νμ¬ μ¬μ©μ κ³μ μ μ κ·Όν μ μμΌλ―λ‘ μΈμ νμ΄μ¬νΉμ μνμ μ¦κ°μν¬ μ μμ΅λλ€.
μμ: μ¬μ©μκ° κ³΅μ© μ»΄ν¨ν°μμ μΉμ¬μ΄νΈμ λ‘κ·ΈμΈνκ³ λ‘κ·Έμμνλ κ²μ μμμ΅λλ€. λ€μ μ¬μ©μκ° μΈμ μ΄ λ§λ£λμ§ μμλ€λ©΄ μ΄μ μ¬μ©μμ κ³μ μ μ κ·Όν μ μμ΅λλ€.
μΈμ κ΄λ¦¬ 보μ λͺ¨λ² μ¬λ‘
μΈμ κ΄λ¦¬ μ·¨μ½μ κ³Ό κ΄λ ¨λ μνμ μννλ €λ©΄ λ€μ 보μ λͺ¨λ² μ¬λ‘λ₯Ό ꡬννλ κ²μ΄ μ€μν©λλ€:
1. κ°λ ₯ν μΈμ ID μ¬μ©
μΈμ IDλ μνΈνμ μΌλ‘ μμ ν λμ μμ±κΈ°(CSPRNG)λ₯Ό μ¬μ©νμ¬ μμ±ν΄μΌ νλ©°, λ¬΄μ°¨λ³ λμ 곡격μ λ°©μ§ν μ μμ λ§νΌ μΆ©λΆν κΈΈμ΄μΌ ν©λλ€. μ΅μ 128λΉνΈ κΈΈμ΄λ₯Ό κΆμ₯ν©λλ€. μμ°¨μ μ«μλ νμμ€ν¬νμ κ°μ μμΈ‘ κ°λ₯ν κ° μ¬μ©μ νΌνμμμ€.
μμ: PHPμ `random_bytes()` ν¨μλ Javaμ `java.security.SecureRandom` ν΄λμ€λ₯Ό μ¬μ©νμ¬ κ°λ ₯ν μΈμ IDλ₯Ό μμ±ν©λλ€.
2. μμ νκ² μΈμ ID μ μ₯
μΈμ IDλ μλ²μ μμ νκ² μ μ₯λμ΄μΌ ν©λλ€. λ°μ΄ν°λ² μ΄μ€λ λ‘κ·Έ νμΌμ μΌλ° ν μ€νΈλ‘ μ μ₯νλ κ²μ νΌνμμμ€. λμ , SHA-256μ΄λ bcryptμ κ°μ λ¨λ°©ν₯ ν΄μ ν¨μλ₯Ό μ¬μ©νμ¬ μΈμ IDλ₯Ό μ μ₯νκΈ° μ μ ν΄μνμμμ€. μ΄λ κ² νλ©΄ 곡격μκ° λ°μ΄ν°λ² μ΄μ€λ λ‘κ·Έ νμΌμ μ κ·ΌνλλΌλ μΈμ IDλ₯Ό νμΉλ κ²μ λ°©μ§ν μ μμ΅λλ€.
μμ: PHPμ `password_hash()` ν¨μλ Spring Securityμ `BCryptPasswordEncoder` ν΄λμ€λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€μ μ μ₯νκΈ° μ μ μΈμ IDλ₯Ό ν΄μν©λλ€.
3. 보μ μΏ ν€ μ¬μ©
μΏ ν€λ₯Ό μ¬μ©νμ¬ μΈμ IDλ₯Ό μ μ₯ν λλ λ€μ 보μ μμ±μ΄ μ€μ λμλμ§ νμΈνμμμ€:
- Secure: μ΄ μμ±μ μΏ ν€κ° HTTPS μ°κ²°μ ν΅ν΄μλ§ μ μ‘λλλ‘ λ³΄μ₯ν©λλ€.
- HttpOnly: μ΄ μμ±μ ν΄λΌμ΄μΈνΈ μΈ‘ μ€ν¬λ¦½νΈκ° μΏ ν€μ μ κ·Όνλ κ²μ λ°©μ§νμ¬ XSS 곡격μ μνμ μνν©λλ€.
- SameSite: μ΄ μμ±μ μ΄λ€ μΉμ¬μ΄νΈκ° μΏ ν€μ μ κ·Όν μ μλμ§ μ μ΄νμ¬ CSRF 곡격μ λ°©μ§νλ λ° λμμ΄ λ©λλ€. μ ν리μΌμ΄μ μ νμμ λ°λΌ `Strict` λλ `Lax`λ‘ μ€μ νμμμ€. `Strict`λ κ°μ₯ κ°λ ₯ν 보νΈλ₯Ό μ 곡νμ§λ§ μ¬μ©μ±μ μν₯μ μ€ μ μμ΅λλ€.
μμ: PHPμμ `setcookie()` ν¨μλ₯Ό μ¬μ©νμ¬ μΏ ν€ μμ±μ μ€μ ν©λλ€:
setcookie("session_id", $session_id, [
'secure' => true,
'httponly' => true,
'samesite' => 'Strict'
]);
4. μ μ ν μΈμ λ§λ£ ꡬν
μΈμ μλ 곡격μκ° μΈμ μ νμ΄μ¬νΉν κΈ°νλ₯Ό μ ννκΈ° μν΄ μ μλ λ§λ£ μκ°μ΄ μμ΄μΌ ν©λλ€. ν©λ¦¬μ μΈ λ§λ£ μκ°μ λ°μ΄ν°μ λ―Όκ°λμ μ ν리μΌμ΄μ μ μν νμ© λ²μμ λ°λΌ λ€λ¦ λλ€. λ€μ λ κ°μ§λ₯Ό λͺ¨λ ꡬννμμμ€:
- μ ν΄ μκ° μ΄κ³Ό: μΌμ κΈ°κ° λΉνμ± μν ν μΈμ μ΄ λ§λ£λμ΄μΌ ν©λλ€.
- μ λ μκ° μ΄κ³Ό: νλκ³Ό κ΄κ³μμ΄ κ³ μ λ μκ°μ΄ μ§λλ©΄ μΈμ μ΄ λ§λ£λμ΄μΌ ν©λλ€.
μΈμ μ΄ λ§λ£λλ©΄ μΈμ IDλ 무ν¨νλμ΄μΌ νλ©° μ¬μ©μλ λ€μ μΈμ¦ν΄μΌ ν©λλ€.
μμ: PHPμμλ `session.gc_maxlifetime` κ΅¬μ± μ΅μ μ μ€μ νκ±°λ μΈμ μ μμνκΈ° μ μ `session_set_cookie_params()`λ₯Ό νΈμΆνμ¬ μΈμ μλͺ μ μ€μ ν μ μμ΅λλ€.
5. μΈμ¦ ν μΈμ ID μ¬λ°κΈ
μΈμ κ³ μ 곡격μ λ°©μ§νλ €λ©΄ μ¬μ©μκ° μ±κ³΅μ μΌλ‘ μΈμ¦ν ν μΈμ IDλ₯Ό μ¬λ°κΈνμμμ€. μ΄λ κ² νλ©΄ μ¬μ©μκ° μλ‘κ³ μμΈ‘ λΆκ°λ₯ν μΈμ IDλ₯Ό μ¬μ©νκ² λ©λλ€.
μμ: PHPμμ `session_regenerate_id()` ν¨μλ₯Ό μ¬μ©νμ¬ μΈμ¦ ν μΈμ IDλ₯Ό μ¬λ°κΈν©λλ€.
6. λͺ¨λ μμ²μ λν΄ μΈμ ID κ²μ¦
λͺ¨λ μμ²μ λν΄ μΈμ IDλ₯Ό κ²μ¦νμ¬ μ ν¨νκ³ λ³μ‘°λμ§ μμλμ§ νμΈνμμμ€. μ΄λ μΈμ νμ΄μ¬νΉ 곡격μ λ°©μ§νλ λ° λμμ΄ λ μ μμ΅λλ€.
μμ: μμ²μ μ²λ¦¬νκΈ° μ μ μΈμ μ μ₯μμ μΈμ IDκ° μλμ§, μμ κ°κ³Ό μΌμΉνλμ§ νμΈν©λλ€.
7. HTTPS μ¬μ©
νμ HTTPSλ₯Ό μ¬μ©νμ¬ μ¬μ©μμ λΈλΌμ°μ μ μΉ μλ² κ°μ λͺ¨λ ν΅μ μ μνΈννμμμ€. μ΄λ κ² νλ©΄ 곡격μκ° λ€νΈμν¬λ₯Ό ν΅ν΄ μ μ‘λλ μΈμ IDλ₯Ό κ°λ‘μ±λ κ²μ λ°©μ§ν μ μμ΅λλ€. μ λ’°ν μ μλ μΈμ¦ κΈ°κ΄(CA)μμ SSL/TLS μΈμ¦μλ₯Ό λ°κ³ HTTPSλ₯Ό μ¬μ©νλλ‘ μΉ μλ²λ₯Ό ꡬμ±νμμμ€.
8. ν¬λ‘μ€ μ¬μ΄νΈ μ€ν¬λ¦½ν (XSS) λ°©μ΄
λͺ¨λ μ¬μ©μ μ λ ₯μ κ²μ¦νκ³ μ΄κ· (sanitize)νμ¬ XSS 곡격μ λ°©μ§νμμμ€. μ¬μ©μ μμ± μ½ν μΈ λ₯Ό νμ΄μ§μ νμνκΈ° μ μ μΆλ ₯ μΈμ½λ©μ μ¬μ©νμ¬ μ μ¬μ μΌλ‘ μ μμ μΈ λ¬Έμλ₯Ό μ΄μ€μΌμ΄ννμμμ€. λΈλΌμ°μ κ° λ¦¬μμ€λ₯Ό λ‘λν μ μλ μμ€λ₯Ό μ ννκΈ° μν΄ μ½ν μΈ λ³΄μ μ μ± (CSP)μ ꡬννμμμ€.
9. ν¬λ‘μ€ μ¬μ΄νΈ μμ² μμ‘° (CSRF) λ°©μ΄
μν°-CSRF ν ν°μ μ¬μ©νμ¬ CSRF 보νΈλ₯Ό ꡬννμμμ€. μ΄ ν ν°μ κ° μμ²μ ν¬ν¨λλ κ³ μ νκ³ μμΈ‘ λΆκ°λ₯ν κ°μ λλ€. μλ²λ κ° μμ²μμ ν ν°μ νμΈνμ¬ μμ²μ΄ ν©λ²μ μΈ μ¬μ©μλ‘λΆν° μ¨ κ²μΈμ§ νμΈν©λλ€.
μμ: λκΈ°ν ν ν° ν¨ν΄ λλ μ΄μ€ μ μΆ μΏ ν€ ν¨ν΄μ μ¬μ©νμ¬ CSRF 보νΈλ₯Ό ꡬνν©λλ€.
10. μΈμ νλ λͺ¨λν°λ§ λ° λ‘κΉ
μΈμ νλμ λͺ¨λν°λ§νκ³ λ‘κΉ νμ¬ λΉμ μμ μΈ λ‘κ·ΈμΈ μλ, μκΈ°μΉ μμ IP μ£Όμ λλ κ³Όλν μμ²κ³Ό κ°μ μμ¬μ€λ¬μ΄ νλμ νμ§νμμμ€. μΉ¨μ νμ§ μμ€ν (IDS) λ° λ³΄μ μ 보 λ° μ΄λ²€νΈ κ΄λ¦¬(SIEM) μμ€ν μ μ¬μ©νμ¬ λ‘κ·Έ λ°μ΄ν°λ₯Ό λΆμνκ³ μ μ¬μ μΈ λ³΄μ μνμ μλ³νμμμ€.
11. μ κΈ°μ μΈ μννΈμ¨μ΄ μ λ°μ΄νΈ
μ΄μ 체μ , μΉ μλ² λ° μΉ μ ν리μΌμ΄μ νλ μμν¬λ₯Ό ν¬ν¨ν λͺ¨λ μννΈμ¨μ΄ κ΅¬μ± μμλ₯Ό μ΅μ 보μ ν¨μΉλ‘ μ΅μ μνλ‘ μ μ§νμμμ€. μ΄λ μΈμ κ΄λ¦¬λ₯Ό μμμν€λ λ° μ μ©λ μ μλ μλ €μ§ μ·¨μ½μ μΌλ‘λΆν° 보νΈνλ λ° λμμ΄ λ©λλ€.
12. 보μ κ°μ¬ λ° λͺ¨μ ν΄νΉ
μ κΈ°μ μΈ λ³΄μ κ°μ¬μ λͺ¨μ ν΄νΉμ μννμ¬ μΈμ κ΄λ¦¬ μμ€ν μ μ·¨μ½μ μ μλ³νμμμ€. 보μ μ λ¬Έκ°μ νλ ₯νμ¬ μ½λ, κ΅¬μ± λ° μΈνλΌλ₯Ό κ²ν νκ³ μ μ¬μ μΈ μ½μ μ μλ³νμμμ€.
λ€μν κΈ°μ μμμ μΈμ κ΄λ¦¬
μΈμ κ΄λ¦¬μ ꡬ체μ μΈ κ΅¬νμ μ¬μ©λλ κΈ°μ μ€νμ λ°λΌ λ€λ¦ λλ€. λ€μμ λͺ κ°μ§ μμ λλ€:
PHP
PHPλ `session_start()`, `session_id()`, `$_SESSION`, `session_destroy()`μ κ°μ λ΄μ₯ μΈμ κ΄λ¦¬ ν¨μλ₯Ό μ 곡ν©λλ€. `session.cookie_secure`, `session.cookie_httponly`, `session.gc_maxlifetime`μ ν¬ν¨νμ¬ PHP μΈμ μ€μ μ μμ νκ² κ΅¬μ±νλ κ²μ΄ μ€μν©λλ€.
Java (μλΈλ¦Ώ λ° JSP)
Java μλΈλ¦Ώμ μΈμ κ΄λ¦¬λ₯Ό μν `HttpSession` μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€. `HttpServletRequest.getSession()` λ©μλλ μΈμ λ°μ΄ν°λ₯Ό μ μ₯νκ³ κ²μνλ λ° μ¬μ©ν μ μλ `HttpSession` κ°μ²΄λ₯Ό λ°νν©λλ€. μΏ ν€ λ³΄μμ μν΄ μλΈλ¦Ώ 컨ν μ€νΈ λ§€κ°λ³μλ₯Ό ꡬμ±ν΄μΌ ν©λλ€.
Python (Flask λ° Django)
Flaskμ Djangoλ λ΄μ₯ μΈμ κ΄λ¦¬ λ©μ»€λμ¦μ μ 곡ν©λλ€. Flaskλ `session` κ°μ²΄λ₯Ό μ¬μ©νκ³ Djangoλ `request.session` κ°μ²΄λ₯Ό μ¬μ©ν©λλ€. ν₯μλ 보μμ μν΄ Djangoμμ `SESSION_COOKIE_SECURE`, `SESSION_COOKIE_HTTPONLY`, `CSRF_COOKIE_SECURE` μ€μ μ ꡬμ±νμμμ€.
Node.js (Express)
Express.jsλ μΈμ μ κ΄λ¦¬νκΈ° μν΄ `express-session`κ³Ό κ°μ λ―Έλ€μ¨μ΄κ° νμν©λλ€. 보μ μΏ ν€ μ€μ λ° CSRF 보νΈλ `csurf`μ κ°μ λ―Έλ€μ¨μ΄λ₯Ό μ¬μ©νμ¬ κ΅¬νν΄μΌ ν©λλ€.
κΈλ‘λ² κ³ λ € μ¬ν
κΈλ‘λ² μ ν리μΌμ΄μ μ κ°λ°ν λ λ€μμ κ³ λ €νμμμ€:
- λ°μ΄ν° μμ£Ό: λ€λ₯Έ κ΅κ°μ λ°μ΄ν° μμ£Ό μꡬ μ¬νμ μ΄ν΄νμμμ€. μ λ½μ GDPRκ³Ό κ°μ νμ§ κ·μ μ μ€μνμ¬ μΈμ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μ²λ¦¬ν΄μΌ ν©λλ€.
- νμ§ν: μ¬λ¬ μΈμ΄μ μ§μ μ€μ μ μ§μνκΈ° μν΄ μ μ ν νμ§ν λ° κ΅μ ν(i18n)λ₯Ό ꡬννμμμ€. μ μ ν λ¬Έμ ννμ 보μ₯νκΈ° μν΄ μΈμ λ°μ΄ν°λ UTF-8λ‘ μΈμ½λ©λμ΄μΌ ν©λλ€.
- μκ°λ: μΈμ λ§λ£λ₯Ό κ΄λ¦¬ν λ μκ°λλ₯Ό μ¬λ°λ₯΄κ² μ²λ¦¬νμμμ€. μΈμ νμμ€ν¬νλ₯Ό μ μ₯ν λλ UTC μκ°μ μ¬μ©νκ³ νμν λλ μ¬μ©μμ νμ§ μκ°λλ‘ λ³ννμμμ€.
- μ κ·Όμ±: WCAG κ°μ΄λλΌμΈμ λ°λΌ μ κ·Όμ±μ κ³ λ €νμ¬ μ ν리μΌμ΄μ μ μ€κ³νμμμ€. μΈμ κ΄λ¦¬ λ©μ»€λμ¦μ΄ μ₯μ κ° μλ μ¬μ©μμκ²λ μ κ·Ό κ°λ₯νλλ‘ νμμμ€.
- κ·μ μ€μ: μ μ© μΉ΄λ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ μ ν리μΌμ΄μ μ κ²½μ° PCI DSSμ κ°μ κ΄λ ¨ 보μ νμ€ λ° κ·μ μ μ€μνμμμ€.
κ²°λ‘
μμ ν μΈμ κ΄λ¦¬λ μΉ μ ν리μΌμ΄μ 보μμ μ€μν μΈ‘λ©΄μ λλ€. μ΄ κ°μ΄λμμ μ€λͺ ν μΌλ°μ μΈ μ·¨μ½μ μ μ΄ν΄νκ³ λ³΄μ λͺ¨λ² μ¬λ‘λ₯Ό ꡬνν¨μΌλ‘μ¨ μ¬μ©μ λ°μ΄ν°λ₯Ό 보νΈνκ³ λ¬΄λ¨ μ κ·Όμ λ°©μ§νλ κ²¬κ³ νκ³ μμ ν μΉ μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€. 보μμ μ§μμ μΈ νλ‘μΈμ€μ΄λ©°, μ§ννλ μνμ μμ λκ°κΈ° μν΄ μΈμ κ΄λ¦¬ μμ€ν μ μ§μμ μΌλ‘ λͺ¨λν°λ§νκ³ κ°μ νλ κ²μ΄ νμμ μ΄λΌλ κ²μ κΈ°μ΅νμμμ€.