Dancer2 2.3.0 发布
内容提要
Dancer2 2.3.0 发布,新增 HTTP QUERY 方法支持,包括 query 路由关键字、请求体反序列化和 is_query 方法;query 成为保留关键字,同名自定义子程序需改名。修复 JSON 序列化器将数字编码为字符串、序列化时修改原数据两个 bug,并消除错误响应泄露服务器文件路径的安全问题,同时修复 Windows 测试失败及 Perl 5.14 兼容性问题。
延伸解读
升级前需检查自定义 query 子程序
2.3.0 将 query 设为保留的 DSL 关键字,若你的应用或旧式插件定义了同名子程序,升级后会触发“Subroutine redefined”警告,插件甚至会在加载时直接失败。因此升级前应全局搜索代码中的 sub query,并重命名为其他名称,避免运行时错误。
JSON 序列化行为修正影响数据完整性
此前版本中,JSON 序列化器会将数字编码为字符串(如 42 变成 "42"),且在序列化含需 UTF-8 解码键的哈希时会删除原数据中的键。2.3.0 修复了这两个问题,序列化不再修改原数据结构。若你的代码依赖旧的字符串化数字或序列化后的数据变更,需检查并调整逻辑。
错误响应不再泄露服务器路径
当客户端发送格式错误的 JSON 时,400 响应曾包含 Dancer2::Serializer::JSON 在服务器上的文件路径和行号,可能帮助攻击者定位 Perl 模块位置。2.3.0 移除了这部分信息,仅保留对调试有用的内容。虽然严重性较低,但建议尽快升级以消除该信息泄露风险。
QUERY 方法支持与兼容性说明
新增的 HTTP QUERY 方法适用于携带请求体的安全、幂等查询,路由关键字为 query,请求体会像 POST 一样被反序列化,并提供 is_query 方法。此外,未指定方法的 any 路由现在也会匹配 QUERY 请求。该版本还修复了 Windows 测试失败及 Perl 5.14 兼容性问题,扩大了运行环境支持。
Q&A
Dancer2 2.3.0 为什么版本号是 2.3.0 而不是 2.2.3?
因为新增了 HTTP QUERY 支持,引入了一个新的关键字 query,可能会与现有代码冲突,所以版本号提升到 2.3.0。
Dancer2 2.3.0 中 HTTP QUERY 方法有什么特点?
QUERY 是一种较新的 HTTP 方法,像 GET 一样安全且幂等,但像 POST 一样携带请求体,适用于搜索和查询,避免将大量参数放在查询字符串中。
升级到 Dancer2 2.3.0 后,我自定义的 query 子程序会受影响吗?
会。query 现在是保留的 DSL 关键字,如果应用定义了自己的 sub query,会出现“Subroutine redefined”警告,需要重命名。旧式插件注册 query 关键字会在加载时失败。
Dancer2 2.3.0 修复了哪些 JSON 序列化器的问题?
修复了两个问题:1) 数字被编码为字符串(如 42 变成 "42");2) 序列化时修改原数据(删除需要 UTF-8 解码的键)。现在数字保持为数字,序列化器构建新容器而不修改原数据。
Dancer2 2.3.0 在安全方面有什么改进?
JSON 错误响应不再泄露服务器文件路径。之前当客户端发送格式错误的 JSON 时,400 响应会包含 Dancer2::Serializer::JSON 的路径和行号,现在错误信息不再包含这些敏感信息。
Dancer2 2.3.0 如何升级?
使用命令 cpanm Dancer2 进行升级。