API 인증과 보안
Application Passwords, JWT 토큰, OAuth, Nonce, CORS 설정, Rate Limiting 등 API 보안의 모든 것을 배웁니다.
API 보안의 중요성
왜 API 보안이 중요한가?
WordPress REST API는 사이트의 모든 데이터에 프로그래밍적으로 접근할 수 있는 통로입니다. 이것은 양날의 검입니다. 올바르게 사용하면 강력한 자동화와 연동이 가능하지만, 보안이 취약하면 데이터 유출, 무단 수정, 사이트 장악 등의 심각한 피해가 발생할 수 있습니다.
API 보안 위협의 실제 사례:
1. 인증 우회: 잘못된 인증 설정으로 비공개 글이나 사용자 정보가 노출되는 경우. 실제로 많은 WordPress 사이트에서 REST API를 통해 사용자 이름이 노출되는 문제가 보고되었습니다.
2. 무단 콘텐츠 수정: 인증 토큰이 유출되어 공격자가 사이트 콘텐츠를 무단으로 수정하는 경우. 2017년에는 WordPress REST API 취약점을 이용한 대규모 사이트 변조 공격이 있었습니다.
3. 데이터 유출: API를 통해 개인정보가 포함된 데이터가 대량으로 유출되는 경우. 특히 WooCommerce 사이트에서 주문 정보, 고객 정보가 노출될 수 있습니다.
4. DDoS 공격: API 엔드포인트에 대량 요청을 보내 서버를 마비시키는 경우. Rate Limiting이 없으면 서버 리소스가 빠르게 고갈됩니다.
Application Passwords 심층
Application Passwords의 작동 원리
WordPress 5.6에서 도입된 Application Passwords는 HTTP Basic Authentication 방식으로 작동합니다. 사용자명과 Application Password를 Base64로 인코딩하여 Authorization 헤더에 포함시키는 방식입니다.
인증 흐름:
1. 클라이언트가 사용자명:비밀번호를 Base64로 인코딩합니다
2. 인코딩된 문자열을 Authorization: Basic {encoded} 헤더에 포함합니다
3. WordPress 서버가 헤더를 디코딩합니다
4. 사용자명으로 사용자를 찾고, 비밀번호를 검증합니다
5. 검증 성공 시 해당 사용자의 권한으로 요청을 처리합니다
중요: Basic Auth는 비밀번호가 Base64로 인코딩될 뿐 암호화되지 않습니다. 따라서 반드시 HTTPS를 사용해야 합니다. HTTP 환경에서는 비밀번호가 평문으로 노출됩니다.
Application Password 관리
생성 위치: WordPress 대시보드 → 사용자 → 프로필 → Application Passwords 섹션
비밀번호 특성:
- 24자 무작위 영숫자
- 4자씩 6그룹으로 공백 구분 표시 (실제 사용 시 공백 제거)
- 한 번만 표시되며 이후 확인 불가
- 각 비밀번호에 고유 이름 부여 (용도 식별용)
- 마지막 사용일, 생성일 추적
관리 작업:
- 생성(Create): 서비스별로 별도의 비밀번호 생성
- 폐기(Revoke): 더 이상 필요 없거나 유출된 비밀번호 즉시 폐기
- 전체 폐기: 모든 Application Password를 한 번에 폐기
- 모니터링: 마지막 사용일 확인으로 불필요한 비밀번호 식별
2. 최소 권한 원칙: 관리자 계정 대신 필요한 권한만 가진 전용 계정 사용을 권장합니다.
3. 정기 갱신: 3~6개월마다 비밀번호를 갱신하세요.
4. 안전한 저장: 비밀번호 관리자(1Password, Bitwarden 등)에 저장하세요. 코드, 설정 파일, 메모장에 평문으로 저장하지 마세요.
5. HTTPS 필수: HTTP 환경에서는 절대 사용하지 마세요.
무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.