문자열 패턴의 허용 범위가 지나치게 넓음 (OpenAPI 3.0)

문자열 패턴이 실제로 허용하려는 형식을 충분히 제한하지 못하는 경우

설명

문자열 형식을 제한하려고 만든 pattern이 너무 넓으면 예상하지 않은 값도 검증을 통과할 수 있습니다. 예를 들어 .*는 문자열 형식을 제한하지 못합니다.

잠재적 영향

서버가 같은 느슨한 기준으로 입력을 처리하면 잘못된 형식의 값이 저장되거나 후속 처리 오류가 발생할 수 있습니다.

해결 방법

허용할 문자와 길이 등 실제 요구사항을 패턴에 반영하세요. 문자열 전체가 일치해야 한다면 ^와 $를 사용하고, 서버에서도 같은 조건을 검증하세요. 부분 일치가 목적이라면 전체 일치를 강제할 필요는 없습니다.

예시

다음 OpenAPI 3.0 발췌 예시는 code의 .*를 소문자 영문자와 숫자 15자리만 허용하는 패턴으로 바꿉니다. 예시의 message도 자유 형식 문장이 아닌 같은 형식의 코드로 가정합니다.

변경 전

json
{
  "openapi": "3.0.0",
  "components": {
    "schemas": {
      "GeneralError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "maxLength": 15,
            "pattern": ".*"
          },
          "message": {
            "type": "string",
            "maxLength": 15,
            "pattern": "^[0-9a-z]{15}$"
          }
        }
      }
    }
  }
}

변경 후

json
{
  "openapi": "3.0.0",
  "components": {
    "schemas": {
      "GeneralError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "maxLength": 15,
            "pattern": "^[0-9a-z]{15}$"
          },
          "message": {
            "type": "string",
            "maxLength": 15,
            "pattern": "^[0-9a-z]{15}$"
          }
        }
      }
    }
  }
}

참조