1.3 执行命令

1.3.1【建议】避免直接调用函数执行系统命令

  • 相关功能的实现应避免直接调用系统命令(如os.system()os.popen()subprocess.call()等),优先使用其他同类操作进行代替,比如:通过文件系统API进行文件操作而非直接调用操作系统命令
  • 如评估无法避免,执行命令应避免拼接外部数据,同时进行执行命令的白名单限制。

1.3.2【必须】过滤传入命令执行函数的字符

  • 程序调用各类函数执行系统命令时,如果涉及的命令由外部传入,过滤传入命令执行函数的字符。
  1. import os
  2. import sys
  3. import shlex
  4. domain = sys.argv[1]
  5. # 替换可以用来注入命令的字符为空
  6. badchars = "\n&;|'\"$()`-"
  7. for char in badchars:
  8. domain = domain.replace(char, " ")
  9. result = os.system("nslookup " + shlex.quote(domain))