# 보안 개선점 목록 다음은 현재 애플리케이션에서 우선적으로 개선해야 할 보안 관련 개념 및 세부 사항입니다. 각 항목에 대해 모르는 부분이 있다면 언제든지 질문해 주세요. ## 1. JWT (JSON Web Token) 저장 방식 개선 (가장 중요!) * **문제점:** 현재 JWT 토큰을 `localStorage`에 저장하고 있습니다. 이는 XSS(Cross-Site Scripting) 공격에 매우 취약합니다. * **세부 개선 방향:** * **1-1. `HttpOnly` 쿠키 사용:** JWT 액세스 토큰을 `HttpOnly` 플래그가 설정된 쿠키에 저장하여 JavaScript 접근을 막고 XSS 공격으로부터 보호합니다. * **1-2. 리프레시 토큰(Refresh Token) 도입:** * 단기간 유효한 액세스 토큰(Access Token)과 장기간 유효한 리프레시 토큰(Refresh Token)을 분리하여 사용합니다. * 액세스 토큰이 만료되면 리프레시 토큰으로 새로운 액세스 토큰을 발급받는 방식을 구현합니다. * 리프레시 토큰도 `HttpOnly` 쿠키에 저장하는 것이 일반적입니다. ## 2. 클라이언트 측 입력값 검증 (Input Validation) 강화 * **문제점:** 아이디와 비밀번호의 단순 빈 값 체크 외에, 입력값의 형식이나 복잡성에 대한 검증이 부족합니다. * **세부 개선 방향:** * **2-1. 비밀번호 복잡성 요구사항 적용:** 회원가입 및 비밀번호 변경 시 최소 길이, 대소문자/숫자/특수문자 포함 등 비밀번호 복잡성 정책을 클라이언트에서 먼저 검증합니다. * **2-2. 아이디/이메일 형식 검증:** 올바른 아이디/이메일 형식인지 클라이언트에서 미리 확인하여 불필요한 서버 요청을 줄이고 사용자 경험을 개선합니다. ## 3. 서버 측 입력값 검증 및 새니타이징 (Input Validation & Sanitization) * **문제점:** 클라이언트 측 검증은 우회될 수 있으므로, 서버에서도 모든 사용자 입력값에 대한 철저한 검증이 필수적입니다. * **세부 개선 방향:** * **3-1. 모든 API 엔드포인트에 적용:** 로그인/회원가입뿐만 아니라, 메모 작성, 검색 등 모든 사용자 입력이 들어가는 API에서 입력값 검증 로직을 추가합니다. * **3-2. 악성 코드/문자열 제거 (Sanitization):** SQL Injection, XSS 공격 등을 시도하는 특수 문자열이나 스크립트가 포함될 경우 이를 제거하거나 무력화하는 처리를 합니다. ## 4. 보안 HTTP 헤더 설정 * **문제점:** 웹 브라우저의 다양한 보안 기능을 활성화하는 HTTP 응답 헤더가 설정되어 있지 않을 수 있습니다. * **세부 개선 방향:** * **4-1. `helmet` 미들웨어 사용 (Node.js/Express):** `helmet`과 같은 라이브러리를 사용하여 `X-Content-Type-Options`, `X-Frame-Options`, `Content-Security-Policy (CSP)` 등의 보안 헤더를 자동으로 설정하여 다양한 웹 취약점으로부터 보호합니다. ## 5. 에러 메시지 상세도 관리 * **문제점:** 서버에서 발생한 상세한 에러 메시지가 클라이언트로 그대로 노출될 경우 공격자에게 시스템 정보를 제공할 수 있습니다. * **세부 개선 방향:** * **5-1. 일반적인 에러 메시지 반환:** 프로덕션 환경에서는 사용자에게 상세한 기술적 에러 메시지 대신 "서버 오류가 발생했습니다. 다시 시도해주세요."와 같은 일반적인 메시지를 반환합니다. * **5-2. 서버 로깅 강화:** 상세한 에러 정보는 서버 내부 로그 파일에만 기록하여 추후 디버깅 및 문제 해결에 활용합니다.