설명
OpenAPI 2.0의 schemes에 http가 있으면 API가 HTTP 전송을 지원한다고 명시한 것입니다. 실제로 인증정보나 민감한 데이터를 HTTP로 전송하면 통신 경로에서 내용을 읽거나 변조할 수 있습니다.
전역 schemes는 작업별 schemes로 재정의할 수 있습니다. schemes를 생략하면 문서를 가져온 URL의 전송 방식을 사용합니다. 명세의 값만으로 배포된 서버의 TLS 설정을 알 수는 없습니다.
잠재적 영향
- HTTP로 보낸 비밀번호, 토큰, 개인정보가 노출될 수 있습니다.
- 암호화되지 않은 요청이나 응답이 변조되어 클라이언트와 서버가 잘못된 데이터를 처리할 수 있습니다.
해결 방법
민감한 통신에는 HTTPS를 사용하고, 전역 및 작업별 schemes를 실제 지원 방식과 일치시키세요. 서버와 게이트웨이의 TLS 설정, 클라이언트의 인증서 검증, 평문 요청 차단을 함께 확인하세요. HTTPS로 리디렉션하더라도 이미 전송한 첫 HTTP 요청은 보호되지 않습니다.
예시
다음은 전역 전송 방식의 비교입니다. info 등 나머지 필수 문서 정보는 생략했습니다.
변경 전
json
{
"swagger": "2.0",
"schemes": [
"http"
],
"paths": {
"/": {
"get": {
"responses": {
"200": {
"description": "ok"
}
}
}
}
}
}
변경 후
json
{
"swagger": "2.0",
"schemes": [
"https"
],
"paths": {
"/": {
"get": {
"responses": {
"200": {
"description": "ok"
}
}
}
}
}
}
변경 후 문서는 HTTPS를 명시합니다. 실제 서버와 클라이언트도 HTTPS를 사용하도록 구성하고 작업별 재정의를 확인해야 합니다.