Learning
토픽 200 / 210·애플리케이션 보안

시큐어 코딩

시큐어 코딩

소프트웨어 개발 과정에서 보안 취약점을 근본적으로 제거하기 위해 안전한 코딩 규칙과 패턴을 적용하는 개발 기법

특징: Shift Left(개발 초기에 보안 적용), 비용 효율적(늦게 발견할수록 수정 비용 증가), 근본적 대응

구성요소: 입력 검증(화이트리스트/길이제한), 출력 인코딩(HTML/URL 인코딩), 인증/인가(안전한 세션/토큰), 암호화(검증된 알고리즘), 오류 처리(민감 정보 노출 방지), 로깅(안전한 로그/민감정보 제외)

OWASP Secure Coding Practices 주요 영역

  • 입력 검증: 화이트리스트 기반, 서버 측 검증 필수, 길이/범위/형식/인코딩 검증
  • 출력 인코딩: 컨텍스트별 인코딩(HTML/JS/URL/CSS), XSS 근본 방어
  • 인증/비밀번호 관리: 강력한 해싱(Argon2/bcrypt), 계정 잠금, MFA
  • 세션 관리: 로그인 시 세션 ID 재생성, HttpOnly/Secure/SameSite, 적절한 타임아웃
  • 접근 제어: 모든 요청에 서버 측 인가 검증, 기본 거부(Deny by Default)
  • 암호화: 검증된 라이브러리 사용, 자체 암호화 구현 금지, 키 하드코딩 금지
  • 에러 처리/로깅: 사용자에게 Generic Error, 내부 로그에 상세 기록, 민감정보 로깅 금지
  • 데이터 보호: 불필요 데이터 미수집, 전송 시 TLS, 저장 시 암호화

CWE Top 25 주요 항목

  • CWE-787: 경계 밖 쓰기(Out-of-bounds Write), 버퍼 오버플로
  • CWE-79: XSS(부적절한 입력 무효화)
  • CWE-89: SQL Injection
  • CWE-416: Use After Free(해제된 메모리 사용)
  • CWE-78: OS 커맨드 인젝션
  • CWE-20: 부적절한 입력 검증
  • CWE-125: 경계 밖 읽기(Out-of-bounds Read)
  • CWE-862: 인가 누락(Missing Authorization)
  • CWE-798: 하드코딩된 자격증명
  • CWE-306: 중요 기능에 대한 인증 누락

기술요소: SQL Injection 방지(Prepared Statement/ORM), XSS 방지(출력 인코딩/CSP), 안전한 난수(CSPRNG/SecureRandom), 에러 처리(Generic Error/스택트레이스 미노출), 하드코딩 금지(시크릿 외부 관리)

적용사례: 웹 앱 개발, API 개발, 보안 코드 리뷰, 행안부 시큐어 코딩 가이드

비교: 시큐어 코딩(개발 시/근본 대책) vs SAST(정적 분석/코드 검사/자동) vs DAST(동적 분석/런타임 테스트) vs 침투테스트(사후/수동/심층)

연관: OWASP Top 10, SAST/DAST, DevSecOps, Secure SDLC