SeeCode Audit Community Edition 帮助文档¶
目录
概述¶
SeeCode Audit
是一套代码审计管理系统,该系统需要结合 seecode-scanner
工具一起使用。 SeeCode Audit
是使用 Python3 + Django2 + MySQL + Redis/Memcached + Redis/RabbitMQ 技术搭建。
SeeCode Audit
其最早的思路来源于 《代码自动化审计系统的建设(上)》 与
《代码自动化审计系统的建设(下)》 文章,经过不断的打磨优化最后开发出 SeeCode Audit
系统,并进行开源。
1. 功能特点¶
1.2 项目与应用管理¶
- 支持线上(GitLab)项目信息同步与管理
- 支持项目时间轴历史记录与查看
- 支持项目应用创建,可为同一个项目不同分支创建不同应用
- 支持对应用的大小、开发语言、代码行数、依赖组件、组件版本的分析
- 支持依赖组件按照条件导出功能
- 支持对应用健康风险:危险、警告、安全的半定量评估
- 支持离线 ZIP 包项目扫描
- 支持扫描任务的 API 触发与手动触发方式
1.3 自定义扫描模板¶
- 支持扫描模板的高度自定义,同一个引擎可包含不同的扫描策略(规则、插件)
- 支持扫描引擎参数自定义
- 支持扫描引擎执行超时设定
- 支持扫描模板的版本控制
1.4 灵活的扫描规则与插件¶
- 支持基于目录、文件、内容、组件等方式的自定义规则
- 支持基于正则表达式的内容检测方式
- 支持代码风格、坏味道、漏洞等不同类型设定
- 支持 Python 插件形式的检测方式
- 支持对扫描策略(规则、插件)的风险评分
- 支持扫描策略(规则、插件)的版本控制
- 支持项目依赖组件对已知漏洞识别能力
1.5 漏洞风险管理¶
- 支持对漏洞的生命周期管理
- 支持漏洞处理流程记录(历史操作记录)
- 支持漏洞文件提交作者、邮箱地址的分析
- 支持漏洞代码片段截取功能
- 支持漏洞位置行的高亮显示功能
- 支持漏洞关键信息的取证功能
1.6 扫描节点监控管理¶
- 支持扫描节点的状态监控
- 支持软件升级包在线打包、版本发布
- 支持软件升级包的历史记录自动生成与历史记录查看
- 使用 RSA 非对称加密方式,对节点间传输内容进行加密
1.7 扫描引擎特点¶
- 完成 65% 的代码单元测试覆盖率,保证程序代码健壮
- 完成 SonarScanner、RuleScanner、PluginScanner 引擎的功能测试,来保证程序正常运行
- 提供命令行接口,并可通过命令行接口对线上项目、本地项目进行扫描
- 支持软件升级包的自动升级与规则热加载
- 支持扫描任务失败时的日志回传功能
- 支持命令行下工具自检
- 支持 Docker 部署
2. 系统设计¶

2.2 Audit 服务端¶
Audit 服务端是 UI 前台系统,用于管理 SeeCode Audit 中的整体功能,其中包括 API 接口服务、项目管理、任务管理、引擎管理、节点管理、系统管理等功能。
2.4 Scan 扫描端¶
使用 seecode-scanner 作为扫描节点,并可水平扩展,详细参考请查看:https://seecode-scanner.readthedocs.io/en/latest/
3. 部署说明¶
3.1 开发/测试环境¶
- Python3 + Django2
- 数据库:MySQL
- 中间件:Redis、FTP
Note
搭建系统前请确保 MySQL、Redis、FTP 等服务已安装并启动。
依赖安装
$ # 使用 virtualenv
$ virtualenv . && source bin/activate
$ pip isntall -r requirements/dev.txt
$ # 安装 seecode-scanner
$ pip install https://github.com/seecode-audit/seecode-scanner/archive/1.0.0.zip
系统搭建
$ # 下载 seecode-audit 代码
$ git clone git@github.com:seecode-audit/seecode-audit.git
创建 seecode_db_ce 数据库, 执行 extras/db/seecode_db_ce_struct.sql、 extras/db/seecode_db_ce_data.sql 脚本:
$ create database seecode_db_ce default character set utf8mb4 collate utf8mb4_unicode_ci;
启动服务
运行 Web 服务,成功后访问 http://127.0.0.1:8080, 账号/密码 root/1qaz!QAZ
:
$ make runserver
启动 GitLab 同步服务:
$ celery -A seecode.celeryctl.celery_app beat -l info -Q gitlab
3.2 生产环境部署¶
- Python3 + Django2 + CentOS 7
- 数据库:MySQL 集群
- 中间件:Memcached、RabbitMQ、FTP/AWS/其他云存储
Note
搭建系统前请确保 Nginx、MySQL、Memcached、RabbitMQ、FTP 等服务已安装并启动。
依赖安装
创建 seecode 账号
$ sudo useradd -m -s /bin/bash seecode && passwd seecode
切换 seecode 账号,开始搭建系统
$ # 创建部署目录
$ sudo mkdir -p /usr/local/seecode && cd /usr/local/seecode
$ # 设置部署目录权限
$ sudo chown seecode:seecode /usr/local/seecode
$ # 拉取线上代码
$ git clone git@github.com:seecode-audit/seecode-audit.git && cd seecode-audit
$ # 安装依赖
$ pip isntall -r requirements/prod.txt
$ # 安装 seecode-scanner
$ pip install https://github.com/seecode-audit/seecode-scanner/archive/1.0.0.zip
配置系统
添加 nginx 配置
$ sudo cp extras/conf/nginx.conf /etc/nginx/conf.d/seecode.conf
添加 supervisord 配置
$ sudo cp extras/conf/supervisord.conf /etc/supervisord.conf
添加 seecode 配置
$ sudo cp extras/conf/seecode.yml /etc/seecode.yml
修改 RSA 的公钥与私钥:
$ vim seecode/libs/core/rsaencrypt.py
初始化系统
创建 seecode_db_ce 数据库, 执行 extras/db/seecode_db_ce_struct.sql、 extras/db/seecode_db_ce_data.sql 脚本:
$ create database seecode_db_ce default character set utf8mb4 collate utf8mb4_unicode_ci;
登陆系统,配置 GitLab、配置 SonarQube。
运行系统
$ supervisord -c /etc/supervisord.conf >/dev/null 2>&1 &
捐赠¶
- BTC 地址:18F4VFDX2MCEXod7zjUF8NepUdAspEcJR8
- ETH 地址:0xB3Bc55F4AAa8E87D3675B547e31d3eEbb585175c
- HT 地址:0x952b4cd9f18126987fdbfab55e1ea72c5ae72e16
依赖服务¶
1. SonarQube¶
- 使用 Docker 搭建
地址 https://github.com/chrismissonbrit/sonarqube,拉取镜像
$ docker pull chrismisson/sonarqube
创建容器,成功后访问 URL http://本机IP:9000
,默认账号: admin/admin
$ docker run -d --name sonarqube -p 0.0.0.0:9000:9000 docker.io/chrismisson/sonarqube
2. vsftpd¶
2.1 安装¶
- 安装 vsftpd、db4:
$ sudo yum install -y vsftpd db4
- FTP服务模式
- PORT(主动)模式,模式模式只要开启服务器的 21 和 20 端口
- PASV(被动)模式,模式需要开启服务器大于 1024 所有 tcp 端口和 21 端口。
PS: 这里我们使用 PASV 的模式
2.2 配置¶
- 目录规划
- FTP 存储位置:/data/vsftpd/
- 日志文件:/var/log/xferlog
- 配置文件:/etc/vsftpd/vsftpd.conf
- 账号配置:/etc/vsftpd/virtusers
- 配置设置
创建一个虚拟宿主用户:
$ useradd virtualhost -s /sbin/nologin
编辑 /etc/vsftpd/vsftpd.conf 文件:
# 不允许匿名访问
anonymous_enable=NO
# 允许本地用户
local_enable=YES
write_enable=YES
# 设置本地用户的文件掩码
local_umask=022
# 不允许匿名上传、写入
anon_upload_enable=NO
anon_mkdir_write_enable=NO
# 日志文件
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
# 开启被动模式
connect_from_port_20=NO
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=60000
chown_uploads=YES
#设定支持异步传输功能。
async_abor_enable=YES
ftpd_banner=Welcome to blah FTP service.
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=NO
listen=YES
# 关于虚拟用户的重要配置
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=virtualhost
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/virtualconf
allow_writeable_chroot=YES
创建日志文件与账户目录:
$ touch /var/log/vsftpd.log
$ chown virtualhost.virtualhost /var/log/vsftpd.log
$ mkdir /etc/vsftpd/virtualconf
创建虚拟用户,内容格式为一行账号一行密码,如下:
$ vim /etc/vsftpd/virtusers
seecode
P@ssw0rd!
生成虚拟用户数据文件:
$ db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
配置 vsftp 的 PAM 验证,非 64 位操作系统请使用 /lib/security/pam_userdb.so :
$ vim /etc/pam.d/vsftpd
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
配置 FTP 用户:
$ mkdir /data/vsftpd/seecode/
$ vim /etc/vsftpd/virtualconf/seecode
local_root=/data/vsftpd/seecode
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=3000
data_connection_timeout=90
max_clients=1000
max_per_ip=100
local_max_rate=25000
- 启动服务
$ systemctl start vsftpd.service
开发测试¶
此方式用于开发与测试时使用。
1. 安装¶
- 使用 git 下载源代码
$ git clone git@github.com:seecode-audit/seecode-scanner.git
- 使用 virtualenv 安装依赖
$ virtualenv . && source bin/activate
$ pip isntall -r requirements/dev.txt
$ pip install https://github.com/seecode-audit/seecode-scanner/archive/1.0.0.zip
2. 配置¶
- 配置数据库, 修改 seecode/settings/dev.py 文件
MySQL
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'seecode_db_ce',
'HOST': '127.0.0.1',
'USER': 'root',
'PASSWORD': '',
'PORT': '3306',
'OPTIONS': {'charset': 'utf8mb4'}
}
}
Sqlite3
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'seecode_db_ce.db'),
}
}
- 配置 Redis
缓存: 修改 seecode/settings/dev.py 文件
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"KEY_PREFIX": "seecode_ce",
"LOCATION": "redis://127.0.0.1:6379/7", # 修改
"OPTIONS": {
"COMPRESSOR": "django_redis.compressors.zlib.ZlibCompressor",
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD": "",
"SOCKET_CONNECT_TIMEOUT": 5, # in seconds
"SOCKET_TIMEOUT": 5, # in seconds
"PICKLE_VERSION": -1 # Use the latest protocol version
}
}
}
服务端 Celery 队列: 修改 seecode/settings/dev.py 文件
CELERY_BROKER_URL = "redis://127.0.0.1:6379/7"
扫描端(seecode-scanner)Celery 队列: 修改 Makefile 文件
runserver:
export SEECODE_CELERY_BROKER_URL=redis://127.0.0.1:6379/2 && \
export SEECODE_C_FORCE_ROOT=False && \
export DJANGO_SETTINGS_MODULE=seecode.settings.dev && python manage.py runserver 0.0.0.0:8080
- 配置 seecode/wsgi.py 文件, ‘seecode.settings.prod’ 修改为 ‘seecode.settings.dev’。
$ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'seecode.settings.dev')
- 配置 seecode/celeryctl.py 文件, ‘seecode.settings.prod’ 修改为 ‘seecode.settings.dev’。
$ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'seecode.settings.dev')
3. 运行¶
- Web 启动
$ make runserver
export SEECODE_CELERY_BROKER_URL=redis://127.0.0.1:6379/2 && \
export SEECODE_C_FORCE_ROOT=False && \
export DJANGO_SETTINGS_MODULE=seecode.settings.dev && python manage.py runserver 0.0.0.0:8080
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
September 21, 2019 - 11:24:31
Django version 2.2.5, using settings 'seecode.settings.dev'
Starting development server at http://0.0.0.0:8080/
Quit the server with CONTROL-C.
- Gitlab 同步
$ celery -A seecode.celeryctl.celery_app -b -l info -Q gitlab
生产环境¶
1. 安装¶
- 下载程序
通过 https://github.com/seecode-audit/seecode-audit/releases 下载最新版本。 解压安装的 zip 包,这里安装在 /usr/local/seecode-audit/ 路径下。
$ sudo unzip seecode-audit.zip -d /usr/local/seecode-audit/
- 安装依赖包
$ pip isntall -r requirements/dev.txt
$ pip install https://github.com/seecode-audit/seecode-scanner/archive/1.0.0.zip
2. 配置¶
2.1 配置 seecode.yml¶
编辑 /etc/seecode.yml 文件,请确认所有环境变量中都使用 DJANGO_SETTINGS_MODULE=seecode.settings.prod
。
mysql:
default:
host: 10.168.1.2
port: 3306
username: "seecode_db"
password: "*****************"
database: "seecode_db_ce"
slave:
host: 10.168.1.3
port: 3306
username: "seecode_db"
password: "*****************"
database: "seecode_db_ce"
redis:
host: 10.168.1.1
port: 6379
db: 1
password: "*****************"
memcached:
host:
172.19.26.1:11211
172.19.26.2:11211
172.19.26.3:11211
172.19.26.4:11211
username: seecode
password: "*****************"
celery:
celery_broker_url: ""
env:
SEECODE_CELERY_BROKER_URL: "redis://:*****************@10.168.1.4:6379/8"
SEECODE_C_FORCE_ROOT: False
- 数据库
数据库默认使用 MySQL,部署方式读写分离。default 节点用于写入,slave 节点用于读取。
- 缓存
- redis
使用 Redis 用于缓存。
- memcached
使用 emcached 用于缓存。
- Celery
- celery
该节点为中的 celery 配置,用于 seecode-audit 的 Gitlab 的队列。
- env
用于设置 eecode Audit 的环境变量,默认设置了 seecode-scanner 使用的环境变量。
2.2 配置 Nginx¶
创建 /etc/nginx/conf.d/seecode.conf 文件,需要注意 server_name、static、proxy_pass 的正确设置。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name seecode-audit.com; # domain
location /static {
alias /usr/local/seecode-audit/seecode/templates/static;
}
location / {
proxy_pass http://127.0.0.1:1768;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 75s;
proxy_read_timeout 600s;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
2.3 配置 gunicorn¶
编辑 seecode/gunicorn.conf.py 文件内容。 配置 /etc/supervisord.conf 设置, 注意 /etc/directory 与 /usr/local/bin/gunicorn 中的路径是否设置正确。
[program:gunicorn]
directory=/usr/local/seecode-audit
environment=DJANGO_SETTINGS_MODULE=seecode.settings.prod
command=/usr/local/bin/gunicorn seecode.wsgi:application -c /usr/local/seecode-audit/seecode/gunicorn.conf
.py --timeout 600
autorestart=true
2.4 配置 Celery¶
注意 directory 与 /usr/local/bin/celery 中的路径是否正确
[program:celery-beat]
directory=/usr/local/seecode-audit
environment=DJANGO_SETTINGS_MODULE=seecode.settings.prod
command=/usr/local/bin/celery -A seecode.celeryctl.celery_app beat -l info -Q gitlab
autorestart=true
3. 运行¶
确保 supervisord.conf 中的配置项与服务器配置的路径一致:
$ supervisord -c /etc/supervisord.conf >/dev/null 2>&1 &
基础数据¶
基础数据表是必须要创建的,保证 Seecode Audit 系统正常运行的关键。
1. 配置信息表¶
- 表名称: sca_common_config
id
: 主键site
: 网站地址, 如:http://seecode-audit.comcontent
: 系统配置的自定义参数,形式为 dictcreated_at
: 创建时间
该表内容的修改是通过 Web 系统中: “系统管理” -> “系统设置” 来设置。
PS: 默认表中只有一条数据,并且 ID 为 1。
2. 扫描引擎表¶
- 表名称: sca_engine
id
: 主键name
: 引擎名称module_name
: 模块名称enable
: 是否开启url
: URLis_customize
: 自定义引擎description
: 引擎描述whitelist_count
: 白名单规则数blacklist_count
: 黑名单规则数config
: 引擎配置revision
: 修订版本updated_at
: 更新时间created_at
: 创建时间
该表内容的修改是通过 Web 系统中: “引擎管理” -> “引擎列表” 来设置。
默认引擎,包含三个:
- SonarScanner
- ID:
1
- 名称:
SonarScanner
- 模块名称:
seecode_scanner.lib.engines.sonarscanner
- ID:
- RuleScanner
- ID:
2
- 名称:
RuleScanner
- 模块名称:
seecode_scanner.lib.engines.rulescanner
- ID:
- PluginScanner
- ID:
3
- 名称:
PluginScanner
- 模块名称:
seecode_scanner.lib.engines.pluginscanner
- ID:
3. 同步 SonarQube 规则¶
- 确保 SonarScanner 引擎参数配置正确
登陆 SeeCode Audit 系统后台,点击进入 “引擎管理” - “引擎列表” - “SonarScanner” 进行编辑。

- 同步 SonarQube 规则操作
登陆 SeeCode Audit 系统后台,点击进入 “引擎管理” - “规则策略” 拉到底部,点击 ” Action” 按钮,单机 批量同步 Sonar 规则
菜单开始同步。

登录认证¶
2. SSO 认证¶
SSO(单点登录, Single Sign-On),确保内部存在 SSO 服务,使用 SSO 登陆,需要设置如下两个参数:
- ENABLE_CAS_SSO
- 设置为
True
,开启 SSO。
- 设置为
- CAS_SERVER_URL
- 设置
CAS_SERVER_URL
的 SSO 登陆地址,如:CAS_SERVER_URL = "http://sso.example.com/"
- 设置
Dashboard¶

项目统计¶
- 项目组数
- 当前系统中的项目组总数,包含线上与自定义分组
- 项目总数
- 当前系统中的项目总数,包含线上与离线项目
- 用户总数
- 当前系统中的线上系统的用户,主要为 Gitlab 中的用户
- 应用总数
- 创建的应用总数
最近扫描¶
最近 15 天内的扫描任务统计分析。
本月漏洞类型分布¶
本月的漏洞类型分布饼形图。
API 接口¶
1. 认证¶
确保 HTTP 请求中携带 Authorization 头,内容格式为:”Token *********
”,其中 Token 可以通过登录系统中的个人账号中获得。
"Authorization": "Token *********"
2. 升级¶
2.1 查询升级信息¶
- 请求
- 方式:
POST
- URI:
/api/v2/upgrade/version/
- 方式:
- 响应
返回非加密内容:
{
"code": 200,
"data": {
"version": "1.85.22",
"md5": "1c0854e4c49646ebcd20ea586b8fc3f8",
"release_time": "2019-09-20T02:54:31.205098+00:00",
"download_path": "/home/seecode/upgrade/1.85.22.tgz",
"download_type": "ftp"
}
}
返回加密内容:
{
"code": 200,
"data": {
"secret": "WSoZvXo7RwEGJP1YsZ+2ylcD/WusnXMIKNb96GsDjTEzsivjrWRVsQN9tcDY5j6K4d2Qz1q0k5oaMfxSvyii0Hw8A9EF5Xtz5PokJ90OZtVUQAr6OK6CPumnaq77Dflx5OPuNPCNjf2267yyHY9AXCQV6Q5x/B0JOqZl/Se7/uTQvTgXPPyroXILo8gl2ZwI1GM1LlebDC0gELZgvv0+rbOWbNSeLbX0FcLaQYDuPUNBUXte1H4QZglhr5vkvNwCQv1MhW9XdRSjkYzwZYM0mBVzR1Db2XS6RWJYJAlOOKevdcrmF+iJCrF96kJPrlqalLACyhbAt/6MlPZ35tC+Mg=="
}
}
2. 任务¶
2.1 查询扫描任务¶
- 请求
- 方式:
GET
- URI:
/api/v2/task/:task_id/
- 参数:
- task_id: [整型] 扫描任务的ID
- 状态码:
- 200: 返回成功
- 400: 参数错误
- 401: 无效 token
- 404: 项目未找到
- 方式:
- 响应
返回内容:
{
"code": 200,
"data": {
"task_id": 1862,
"project_name": "tightMdmV2",
"group_name": "默认扫描分组",
"status": 1,
"executor_ip": "192.168.1.1"
},
"desc": "成功!"
}
2.2 创建扫描任务¶
- 请求
- 方式:
POST
- URI:
/api/v2/scan/add/
- 参数:
- ssh_url: [字符串] ssh 地址
- branch: [字符串] 分支
- app_name: [字符串] 应用名称
- force_scan: [整型] 是否强制扫描,1 强制,0 不强制
- 状态码:
- 200: 返回成功
- 400: 参数错误
- 401: 无效 token
- 404: 项目未找到
- 方式:
{
"ssh_url":"git@github.com:seecode-audit/vuln_java.git",
"branch": "master",
"app_name":"vuln_java",
"force_scan": 0
}
- 响应
返回内容:
{
"code": 200,
"desc": "成功!"
}
2.3 更新扫描状态¶
- 请求
- 方式:
POST
- URI:
/api/v2/task/:task_id/status/
- 参数:
- task_id: [整型] 扫描任务的ID
- status: [整型] 状态码
- end_time: [字符串] 结束时间
- title: [字符串] 状态阶段
- reason: [字符串] 原因
- 状态码:
- 200: 返回成功
- 400: 参数错误
- 401: 无效 token
- 404: 项目未找到
- 方式:
{
"status": 1,
"end_time":"2019-07-30 09:37:03",
"title":"扫描失败",
"reason":"没有找到sonar-scanner。"
}
- 响应
返回内容:
{
"code": 200,
"desc": "成功!"
}
2.4 更新统计信息¶
- 请求
- 方式:
POST
- URI:
/api/v2/task/:task_id/statistic/
- 参数:
- task_id: [整型] 扫描任务的ID
- size: [整型] 项目大小 KB
- total: [整型] 代码总行数
- language: [字符串] 项目开发语言
- statistics: 文件统计信息
- 状态码:
- 200: 返回成功
- 400: 参数错误
- 401: 无效 token
- 404: 项目未找到
- 方式:
{
"size": 80,
"total": 2048,
"language":"java",
"statistics":[
{
"language": "java",
"files": 2,
"blank": 300,
"comment": 200,
"code": 100
},
{
"language": "python",
"files": 2,
"blank": 100,
"comment": 20,
"code": 103
}
]
}
- 响应
返回内容:
{
"code": 200,
"desc": "成功!"
}
2.5 更新依赖组件¶
- 请求
- 方式:
POST
- URI:
/api/v2/task/:task_id/component/
- 参数:
- task_id: [整型] 扫描任务的ID
- 状态码:
- 200: 返回成功
- 400: 参数错误
- 401: 无效 token
- 404: 项目未找到
- 方式:
- 响应
[
{
"name": "fastjson",
"tag": "com.alibaba",
"version": "1.2.58",
"new_version": "",
"origin": "pom.xml"
}
]
返回内容:
{
"code": 200,
"desc": "成功!"
}
2.6 更新漏洞信息¶
- 请求
- 方式:
POST
- URI:
/api/v2/task/:task_id/issues/
- 参数:
- task_id: [整型] 扫描任务的ID
- rule_key: [字符串] 规则 key
- risk_id: [整型] 风险 id
- category: [字符串] 漏洞类型
- title: [字符串] 漏洞标标题
- file: [字符串] 漏洞文件
- author: [字符串] 最后提交作者
- author_email: [字符串] 邮箱
- hash: [字符串] 最后 commit id
- start_line: [整型] 开始行
- end_line: [整型] 结束行
- report: [字符串] 报告
- code_example: [字符串] 代码片段
- is_false_positive: [布尔] 是否误报
- whitelist_rule_id: [整型] 白名单 ID
- evidence_content: [字符串] 取证内容
- engine: [整型] 引擎 ID
- 状态码:
- 200: 返回成功
- 400: 参数错误
- 401: 无效 token
- 404: 项目未找到
- 方式:
[
{
"rule_key": "java:jackson-databind-cve-2019-12384",
"risk_id": 3,
"category": "vulnerability",
"title": "Jackson-databind \u53cd\u5e8f\u5217\u5316\u6f0f\u6d1e (CVE-2019-12384)",
"file": "pom.xml",
"author": "zhangsan",
"author_email": "zhangsan@example.com",
"hash": "182fb49613656f833ed4c5ed059e7855269e56f2",
"start_line": 61,
"end_line": 62,
"report": "https://git.example.com/app_group/app/blob/master/pom.xml#L61",
"code_example": "\n <jackson.version>2.9.9</jackson.version>\n <jackson-databind.version>2.9.9.3</jackson-databind.version>\n <dealer.lib.version>2018.08.29.1730</dealer.lib.version>\n\n",
"is_false_positive": false,
"whitelist_rule_id": "",
"evidence_content": "2.9.9",
"engine": 2
}
]
- 响应
返回内容:
{
"code": 200,
"desc": "成功!"
}
3. 系统¶
3.1 日志收集¶
- 请求
- 方式:
POST
- URI:
/api/v2/sys/log/
- 参数:
- title: [字符串] 标题
- description: [字符串] 描述
- stack_trace: [字符串] 堆栈信息
- sys_type: [字符串] 类型
- level: [字符串] 级别
- 状态码:
- 200: 返回成功
- 400: 参数错误
- 401: 无效 token
- 404: 项目未找到
- 方式:
{
"title": "",
"description": "",
"stack_trace": "",
"sys_type": "",
"level": ""
}
- 响应
返回内容:
{
"code": 200,
"desc": "成功!"
}
3.1 扫描节点注册¶
- 请求
- 方式:
POST
- URI:
/api/v2/node/host/
- 参数:
- hostname: [字符串] 主机名称
- ipv4: [字符串] ipv4 地址
- ipv6: [字符串] ipv6 地址
- role: [字符串] 角色
- ui_version: [字符串] UI 版本
- client_version: [字符串] 客户端版本
- 状态码:
- 200: 返回成功
- 400: 参数错误
- 401: 无效 token
- 404: 项目未找到
- 方式:
{
"hostname": "test.local",
"ipv4": "192.168.1.1",
"ipv6": "",
"role": "client",
"ui_version": "",
"client_version": "1.8.22"
}
- 响应
返回内容:
{
"code": 200,
"desc": "成功!"
}