首页/安全/漏洞与攻击面速查/命令注入原理与防护
Web 漏洞原理与防护55 条

命令注入原理与防护

系统命令注入源于把用户输入拼接进 shell 命令:&、|、;、$() 等元字符让输入变成新命令;防护是避免 shell 拼接(用参数数组调用),对必须校验的参数严格限制取值域。

漏洞与攻击面速查安全更新于 2026-10-12

风险与安全对比

风险与安全对比
风险:os.system('ping -c 1 ' + ip)
安全:subprocess.run(['ping', '-c', '1', ip], check=True)
参数数组方式不经过 shell,元字符失去特殊含义

输入校验补充(Python)

输入校验补充(Python)
import ipaddress
try:
    ip = str(ipaddress.ip_address(user_input))
except ValueError:
    raise ValueError('invalid ip')
# 允许的输入域越窄(IP、域名、枚举值),风险面越小
必须使用 shell=True 时,需要自行完成整体引用转义,出错概率高,应尽量避免。

易错点

  • 只过滤分号与管道符:换行、反引号、$() 等仍是危险元字符,应改用参数数组而非过滤

数据来源与参考

  • OWASP OS Command Injection Defense Cheat Sheet
  • Python subprocess 文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌