1.3 执行命令
1.3.1【建议】避免直接调用函数执行系统命令
- 相关功能的实现应避免直接调用系统命令(如
os.system()
、os.popen()
、subprocess.call()
等),优先使用其他同类操作进行代替,比如:通过文件系统API进行文件操作而非直接调用操作系统命令 - 如评估无法避免,执行命令应避免拼接外部数据,同时进行执行命令的白名单限制。
1.3.2【必须】过滤传入命令执行函数的字符
- 程序调用各类函数执行系统命令时,如果涉及的命令由外部传入,过滤传入命令执行函数的字符。
import os
import sys
import shlex
domain = sys.argv[1]
# 替换可以用来注入命令的字符为空
badchars = "\n&;|'\"$()`-"
for char in badchars:
domain = domain.replace(char, " ")
result = os.system("nslookup " + shlex.quote(domain))