curl --continue-at 参数异常行为分析
问题描述
当curl命令与--continue-at
参数一起使用时,会意外忽略--no-clobber
选项,导致curl将输出内容追加到目标文件中(即使文件已存在)。如果同时使用--remove-on-error
参数,可能在早期错误时导致文件被意外删除。该行为在与--remote-name
和--remote-header-name
参数组合时也会出现。
复现步骤
案例1:违反--no-clobber的文件篡改
bash
echo not to be touched > robots.txt
curl --no-clobber -C 1 -O https://curl.se/robots.txt
案例2:结合--remove-on-error导致文件删除
bash
echo something > important
curl --remove-on-error -C 1 -o important https://nonexisting.curl.se/
修复建议
最简单的解决方案是禁止--continue-at
与--no-clobber
或--remove-on-error
参数组合使用。
影响评估
可能导致现有文件被意外修改或删除。
开发者讨论
curl开发团队认为这更多是未明确文档化的行为而非安全问题,但承认需要完善以下文档内容:
- 明确说明
--continue-at
会对已存在文件执行追加操作 - 澄清
--range
与--continue-at
参数的交互逻辑 - 确保参数组合时行为一致(应报错而非执行意外操作)
最终结论:该问题属于文档缺陷而非安全漏洞。