| 首选 | 使用语言内置库替代 shell 命令 |
|---|---|
| 次选 | 参数数组形式调用(不经过 shell 拼接) |
| 兜底 | 对文件名/路径参数做白名单与规范化校验 |
调用方式对比(教学示意)
调用方式对比(教学示意)
不安全:以 shell 解释字符串(输入可携带分隔符改变命令结构)
安全: 以参数数组调用(如 ['convert', 源文件, 目标文件]),不经过 shell黑名单过滤特殊字符不可靠(编码、通配符等写法多样),应从根本上避免拼接。
修复核心是避免经过 shell 解析:优先用语言原生 API;必须调用外部程序时以参数数组传递,并对取值做白名单校验。
| 首选 | 使用语言内置库替代 shell 命令 |
|---|---|
| 次选 | 参数数组形式调用(不经过 shell 拼接) |
| 兜底 | 对文件名/路径参数做白名单与规范化校验 |
不安全:以 shell 解释字符串(输入可携带分隔符改变命令结构)
安全: 以参数数组调用(如 ['convert', 源文件, 目标文件]),不经过 shell