설명
OpenAPI 3.0 서버 객체의 variables는 URL 템플릿의 변수를 치환하기 위한 정의입니다. URL에서 사용하지 않는 변수가 남아 있으면 실제로 바꿀 수 있는 서버 주소 부분을 오해하기 쉽습니다.
잠재적 영향
사용자가 불필요한 변수 값을 설정하거나 환경별 주소를 잘못 관리할 수 있습니다. 사용하지 않는 변수 자체가 서버의 접근 제어를 변경하지는 않습니다.
해결 방법
URL 템플릿과 변수 이름을 비교해 사용하지 않는 정의를 제거하세요. 실제로 필요한 변수라면 URL에 해당 자리표시자를 추가하고 기본값으로 만든 주소가 올바른지 확인하세요.
예시
Link 객체의 서버 설정에 초점을 맞춘 발췌입니다. 완전한 Link에는 대상 작업의 operationId 또는 operationRef도 필요하며 여기서는 생략했습니다.
변경 전
json
{
"openapi": "3.0.0",
"info": {
"title": "Simple API Overview",
"version": "1.0.0"
},
"paths": {
"/": {
"get": {
"summary": "List API versions",
"responses": {
"200": {
"description": "the user being returned",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"format": "uuid"
}
}
}
}
},
"links": {
"address": {
"server": {
"url": "https://development.{server}.com/{base}",
"variables": {
"base": {
"default": "v2"
},
"server": {
"default": "gigant-server"
},
"another": {
"default": "another"
}
}
}
}
}
}
},
"operationId": "listVersionsv2"
}
}
}
}
변경 후
json
{
"openapi": "3.0.0",
"info": {
"title": "Simple API Overview",
"version": "1.0.0"
},
"paths": {
"/": {
"get": {
"summary": "List API versions",
"responses": {
"200": {
"description": "the user being returned",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"format": "uuid"
}
}
}
}
},
"links": {
"address": {
"server": {
"url": "https://development.{server}.com/{base}",
"variables": {
"base": {
"default": "v2"
},
"server": {
"default": "gigant-server"
}
}
}
}
}
}
},
"operationId": "listVersionsv2"
}
}
}
}
변경 전의 another는 URL에 사용되지 않습니다. 변경 후에는 실제 자리표시자인 server와 base의 정의만 남습니다.