説明
文字列の形式を制限するための pattern でも、許容範囲が広すぎると想定外の値が検証を通る可能性があります。例えば、.* では文字列の形式を制限できません。
想定される影響
サーバーも同じ緩い条件で入力を検証すると、形式の異なる値が保存されたり、後続の処理でエラーが発生したりする可能性があります。
対処方法
許可する文字や長さなど、実際の要件をパターンに反映してください。文字列全体を一致させる必要がある場合は ^ と $ を使い、サーバーでも同じ条件で検証してください。部分一致を意図している場合は、全体一致を強制する必要はありません。
例
次のOpenAPI 3.0の抜粋では、code の .* を、ASCIIの英小文字と数字からなる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}$"
}
}
}
}
}
}