웹 보안 체크리스트
웹 애플리케이션 보안을 위한 필수 점검 항목을 확인하세요. · 2025.02 기준
최소 8자 이상, 대소문자/숫자/특수문자 조합을 요구하는 비밀번호 정책을 적용해야 합니다. 사전 단어나 연속 문자열을 차단하는 규칙도 포함하세요.
OTP, SMS, 인증 앱 등을 활용한 다중 인증을 제공하여 계정 탈취 위험을 줄여야 합니다. 관리자 계정에는 필수로 적용하세요.
세션 ID는 충분히 길고 랜덤해야 하며, 로그인 후 세션 ID를 재발급(세션 고정 공격 방지)해야 합니다. 비활성 시 자동 만료도 설정하세요.
비밀번호를 평문이 아닌 bcrypt, argon2 등의 안전한 해시 알고리즘과 솔트를 적용하여 저장해야 합니다.
무차별 대입 공격을 방지하기 위해 일정 횟수 이상 로그인 실패 시 계정 잠금 또는 지연을 적용해야 합니다.
다른 사용자의 리소스에 접근하거나 권한 없는 기능을 실행할 수 없도록 서버 측에서 권한을 검증해야 합니다.
비밀번호 재설정 토큰은 충분히 랜덤하고 유효 기간이 짧아야 하며, 사용 후 즉시 무효화해야 합니다.
로그아웃 시 서버 측 세션을 완전히 삭제하고, 관련 쿠키도 제거하여 세션 재사용을 방지해야 합니다.
비밀번호 변경, 결제 등 중요한 작업 수행 전에 현재 비밀번호 입력이나 추가 인증을 요구해야 합니다.
사용자 입력이 SQL 쿼리에 직접 포함되지 않도록 파라미터화된 쿼리(Prepared Statement) 또는 ORM을 사용해야 합니다.
사용자 입력을 출력할 때 반드시 이스케이프 처리하고, Content-Security-Policy 헤더를 설정하여 인라인 스크립트 실행을 제한해야 합니다.
상태를 변경하는 모든 POST/PUT/DELETE 요청에 CSRF 토큰을 포함시켜 위조 요청을 방지해야 합니다.
업로드 파일의 확장자, MIME 타입, 크기를 서버 측에서 검증하고, 실행 가능한 파일의 업로드를 차단해야 합니다.
클라이언트 검증은 우회 가능하므로 모든 입력값에 대해 서버 측에서도 타입, 길이, 범위, 형식 검증을 수행해야 합니다.
사용자 입력이 시스템 명령어에 포함되지 않도록 화이트리스트 방식으로 입력을 검증하고, 직접 명령어 실행을 피해야 합니다.
로그인 후 리다이렉트 등에서 외부 URL로의 리다이렉션을 허용하지 않도록 화이트리스트 기반 검증을 적용해야 합니다.
동일한 파라미터명을 여러 번 전달하여 서버 로직을 우회하는 공격을 방지하기 위해 파라미터 처리 방식을 명확히 해야 합니다.
모든 페이지에 HTTPS를 적용하고, Strict-Transport-Security 헤더로 HTTP 접속을 자동 차단하여 중간자 공격을 방지해야 합니다.
개인정보, 카드 정보 등 민감 데이터는 AES-256 이상의 안전한 알고리즘으로 암호화하여 저장해야 합니다.
비밀번호, 토큰, 개인정보 등이 애플리케이션 로그에 기록되지 않도록 로깅 정책을 수립하고 필터링해야 합니다.
인증 쿠키에는 Secure, HttpOnly, SameSite 속성을 반드시 설정하여 탈취 및 위조를 방지해야 합니다.
로그인 페이지, 마이페이지 등 민감한 정보가 포함된 페이지는 Cache-Control: no-store를 설정하여 브라우저 캐싱을 방지해야 합니다.
외부 API 호출, DB 연결 등 모든 데이터 전송 구간에서 TLS 1.2 이상의 프로토콜을 사용해야 합니다.
API 응답에 불필요한 개인정보를 포함하지 않도록 하고, 프론트엔드에 전달하는 데이터를 최소화해야 합니다.
Content-Security-Policy, X-Frame-Options, X-Content-Type-Options 등 주요 보안 헤더를 설정하여 다양한 공격을 방지해야 합니다.
웹 서버의 디렉토리 리스팅 기능을 비활성화하여 파일 목록이 외부에 노출되지 않도록 해야 합니다.
스택 트레이스, DB 정보 등이 포함된 상세 에러 메시지가 사용자에게 노출되지 않도록 커스텀 에러 페이지를 사용해야 합니다.
응답 헤더에서 Server, X-Powered-By 등의 버전 정보를 제거하여 공격자가 서버 환경을 파악하지 못하도록 해야 합니다.
TRACE, OPTIONS 등 불필요한 HTTP 메서드를 비활성화하여 XST(Cross-Site Tracing) 공격을 방지해야 합니다.
관리자 페이지는 IP 화이트리스트, VPN, 별도 도메인 등을 통해 접근을 제한하고, 기본 경로(/admin)를 변경해야 합니다.
사용자가 업로드한 파일이 저장되는 디렉토리에서 스크립트 실행 권한을 제거하여 웹셸 공격을 방지해야 합니다.
Referrer-Policy 헤더를 설정하여 외부 사이트로 이동 시 민감한 URL 정보가 유출되지 않도록 해야 합니다.
API 호출 횟수를 제한하여 무차별 대입 공격과 서비스 남용을 방지해야 합니다. IP 및 사용자 기준으로 제한을 설정하세요.
JWT 등 인증 토큰은 적절한 만료 시간을 설정하고, 서명 알고리즘을 none으로 변경하는 공격을 방어해야 합니다.
Access-Control-Allow-Origin을 *로 설정하지 않고, 허용된 도메인만 명시하여 교차 출처 요청을 제어해야 합니다.
API 입력 데이터의 스키마 검증을 수행하고, 응답에 불필요한 내부 정보가 포함되지 않도록 해야 합니다.
API 버전을 명확히 관리하고, 구 버전 API의 보안 패치 적용 및 사용 중단 일정을 수립해야 합니다.
프로덕션 환경에서는 GraphQL Introspection 쿼리를 비활성화하여 스키마 정보 노출을 방지해야 합니다.
외부 서비스로부터의 Webhook 요청은 서명을 검증하여 위조된 요청을 차단해야 합니다.
프로덕션 환경에서 디버그 모드, 개발자 도구, 소스맵 등을 비활성화하여 내부 정보 노출을 방지해야 합니다.
npm audit, Snyk, Dependabot 등을 활용하여 사용 중인 패키지의 알려진 취약점을 정기적으로 점검하고 업데이트해야 합니다.
데이터베이스와 주요 파일의 정기 백업을 수행하고, 복구 절차가 정상 동작하는지 주기적으로 테스트해야 합니다.
API 키, DB 비밀번호 등 민감 정보를 소스 코드에 하드코딩하지 않고, 환경 변수 또는 시크릿 매니저로 관리해야 합니다.
로그인 실패, 권한 오류, 비정상 접근 등 보안 이벤트를 로깅하고 실시간 모니터링 및 알림 체계를 구축해야 합니다.
빌드/배포 파이프라인에 보안 스캔(SAST, DAST)을 통합하고, 배포 권한을 최소 인원으로 제한해야 합니다.
보안 사고 발생 시 탐지, 격리, 복구, 보고의 단계별 대응 절차를 문서화하고 정기 훈련을 실시해야 합니다.
불필요한 패키지, 도구, 사용자 계정을 제거한 최소 이미지를 사용하여 공격 표면을 줄여야 합니다.