OpenAPI 3.0中指定format的string类型是否需额外设置maxLength?
结论
OpenAPI规范中的format本身没有约定任何默认最大长度,你必须额外显式配置maxLength来防范恶意请求。
具体原因
format的定位只是语义提示:它仅用来告知校验工具、代码生成器当前字符串需要匹配的格式规则(比如邮箱格式、域名格式),完全不包含长度限制的逻辑。- 即便部分格式对应的RFC标准有推荐长度上限,不同OpenAPI生态工具的实现也不一定会默认遵循,依赖这一点做安全校验会出现不可控的兼容问题。
- 攻击者完全可以构造符合格式规则、但长度极大的字符串发起请求,比如超长的合规格式邮箱、超长URI,可能触发正则拒绝服务(ReDoS)、存储溢出、服务资源占满等安全问题,仅靠
format校验完全无法防范这类风险。
参考配置
你可以结合通用规范和自身业务场景,给不同format的参数加上明确的maxLength,示例如下:
email: type: string format: email maxLength: 254 # 对齐RFC 5321规定的邮箱最大长度,业务限制更严可自行调低 hostname: type: string format: hostname maxLength: 253 # 对齐DNS域名的标准最大长度 path: type: string format: uri maxLength: 2048 # 可根据业务实际情况调整,主流浏览器对URI的长度支持普遍在2048以上
内容的提问来源于stack exchange,提问作者Gladka Zoya
相关产品推荐
相关产品推荐

