我有解析输入参数的python代码:
parser=OptionParser()
parser.add_option("-o", dest="out", default=os.getenv('Path',None), help="file path")
parser.add_option("-c", dest="content", default=os.path.abspath(sys.path[0]), help="cont path")
parser.add_option("-t", dest="tool", default=os.getenv('Tool',None), help="tool path")
parser.add_option("-m", dest="man", default=os.getenv('Path',os.getcwd())+os.sep+"man.ini", help="man.ini location")
(opt, agrs)=parser.parse_args()
Checkmarx说:应用程序的主方法使用cmd调用OS(shell(命令,使用不受信任的字符串执行该命令。这可能允许攻击者注入任意命令,并启用命令注入攻击。攻击者可以通过用户输入、parse_args。。。我想我需要去掉不需要的字符,比如|,&和但我不确定如何/在哪里做;(opt,agrs(=parser.parse_args(("?感谢
您的代码只显示源代码(将命令行参数解析为字符串(,而不显示sync(我认为它是exec(。一般来说,我建议清理执行代码附近的有效负载(在这种情况下是一个/多个参数的字符串(,并且只清理需要清理的内容。
事先尝试对所有东西进行消毒可能会导致以下两种情况之一:缺少一些边缘情况并创建易受攻击的代码,或者由于不必要的环境卫生而限制参数的值范围。