跨路径运行StaCoAn漏洞分析工具报NoSectionError错误求助
问题根因
StaCoAn的代码中加载配置文件时使用了相对路径,只有在项目根目录执行时,程序才能正确读取到同目录下的配置文件,切换到其他路径执行时相对路径指向的位置不存在合法的配置文件,因此抛出配置段不存在的报错。
解决方案
方案1:无需修改代码,适配流水线场景
在执行StaCoAn命令前先切换到工具的根目录,执行完成后再切回原工作目录即可,流水线中可以直接用子shell的方式执行,不会影响全局工作路径:
# 替换为你实际的StaCoAn根目录路径 STACOAN_PATH="/home/jenkins/StaCoAn" # 子shell中执行,括号内的cd只作用于子进程 (cd $STACOAN_PATH && python src/stacoan.py 你的执行参数) # 如果是用编译好的二进制文件,执行命令改为: # (cd $STACOAN_PATH && ./stacoan 你的执行参数)
如果需要在任意路径直接调用,可以把上面的逻辑封装成shell脚本,放到/usr/local/bin等全局PATH路径下,示例脚本/usr/local/bin/stacoan内容如下:
#!/bin/bash STACOAN_PATH="/home/jenkins/StaCoAn" cd $STACOAN_PATH && exec ./stacoan "$@"
给脚本加执行权限:chmod +x /usr/local/bin/stacoan,之后在任意路径直接执行stacoan 参数即可正常使用。
方案2:修改源代码永久修复
修改配置文件加载逻辑,把相对路径改为基于当前文件路径拼接的绝对路径,找到项目中初始化configparser加载配置文件的代码位置,一般在src/config.py或者主入口开头的位置,将原来的加载代码:
config.read('config.ini')
修改为如下逻辑:
import os # 获取当前文件所在的目录,向上定位到项目根目录 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 拼接配置文件的绝对路径 CONFIG_PATH = os.path.join(BASE_DIR, 'config.ini') config.read(CONFIG_PATH)
修改完成后重新测试非根目录执行,正常读取配置后即可解决该报错,需要二进制版本的话可以重新用PyInstaller编译一次即可。
内容的提问来源于stack exchange,提问作者Salvador Arreola Rojas
相关产品推荐
相关产品推荐

