我在运行脚本时使用os.system('cls' if os.name == 'nt' else 'clear')
来清除输出但是在编码时我遇到了一个安全问题
使用shell启动进程,检测到可能的注入,安全问题。
如何解决问题?
答案 0 :(得分:1)
子进程模块为产卵提供了更强大的功能 新流程并检索其结果;使用该模块是 比使用这个功能更好。请参阅更换旧功能 使用子流程文档中的子流程模块部分 一些有用的食谱。
我建议使用其中一个subprocess作为参数shell=False
进行测试,看看是否有关于编码的工作。 subprocess.run(['clear'])
在我的本地Python解释器中工作,你必须在编码上测试它。
如果是Python 2.x,您可以尝试:
subprocess.call(['clear'])
答案 1 :(得分:1)
当您使用从用户获取的参数运行函数时,它会出现安全问题。例如:
import os
def do_clear(command): # Notice command is sent as argument from outside world and hence this makes it vulnerable
os.system(command)
如果使用例如
调用该方法do_clear('rm -f */*')
然后它可能会删除当前目录的所有文件。但是如果要直接使用'clear'命令,则不必担心安全问题,因为在所有条件下只运行'clear'。所以以下功能足够安全。
def do_clear(): # Notice command is not sent as argument from outside world
os.system('cls' if os.name == 'nt' else 'clear') # This is not risky as os.system takes clear/cls command always.