피드로 돌아가기
Dev.toSecurity
원문 읽기
데이터-시크릿 분리 설계를 통한 계정 탈취 및 유출 리스크 원천 차단
Credentials in web applications: how to store them properly
AI 요약
Context
시크릿 정보를 일반 데이터와 동일하게 처리하여 데이터베이스 유출 시 평문 패스워드가 노출되는 구조적 취약점 존재. 특히 Fast Hash 알고리즘 사용 및 브라우저 저장소 기반의 토큰 관리로 인한 XSS/CSRF 공격 노출도가 높은 상황.
Technical Solution
- bcrypt, scrypt, argon2id 등 Memory-hard 알고리즘 도입을 통한 Brute-forcing 비용 증대 및 연산 속도 의도적 지연 설계
- 사용자별 고유 Salt 자동 생성을 통한 Rainbow Table 공격 무력화 및 동일 패스워드에 대한 서로 다른 Hash 값 저장 구조 구현
- Session Token의 브라우저 접근을 차단하는 HttpOnly, HTTPS 전송을 강제하는 Secure, CSRF 방어를 위한 SameSite=Lax 플래그 적용
- 128 bits 이상의 Entropy를 보장하는 Cryptographically Secure RNG 기반의 Opaque Token 생성으로 예측 가능성 제거
- 서버 사이드 Proxy 구조를 통해 Service Credential의 클라이언트 노출을 차단하고 백엔드 환경 변수 기반의 관리 체계 구축
- 로그 Aggregator 전송 전 민감 필드를 제거하는 Log Scrubbing 프로세스 적용으로 2차 유출 경로 차단
실천 포인트
- 패스워드 저장 시 SHA-256 등 Fast Hash 대신 argon2id 사용 여부 검토 - 세션 쿠키에 HttpOnly, Secure, SameSite 플래그가 모두 설정되었는지 확인 - localStorage에 인증 토큰을 저장하고 있지 않은지 점검 및 HttpOnly 쿠키로 전환 - 로그 출력부에서 Request Body의 민감 정보가 필터링되는지 Log Scrubbing 로직 검증 - 서비스 API Key가 클라이언트 코드나 빌드 타임 환경 변수에 포함되어 있는지 확인