설명
문자열 형식을 제한하려고 만든 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}$"
}
}
}
}
}
}