使用模型集执行代码检查
应用场景
在项目代码规模持续增长和开发框架多样化的情况下,静态分析模型的应用显得尤为重要,它主要为业务代码中的特定逻辑或框架要求(如自定义内存分配器my_malloc需配套my_free、如标记用户输入get_user_input()为不可信源)提供精准检查,弥补通用规则对定制化场景覆盖不足的问题。
提前准备
在本地准备好“Model1.json”文件,文件中内容如下:
{
"RulePackage": {
"Language": "C++"
},
"Rules": {
"TaintSourceRule": [
{
"Function":{
"Function":{
"Value":"get_user_input"
}
},
"Source":{
"OutArgs":"return",
"TaintFlags":"UntrustedSource"
}
}
],
"TaintSinkRule": [
{
"Function":{
"Function":{
"Value":"executeCmd"
}
},
"Sink":{
"InArgs":"0",
"TaintFlags":"UntrustedSink"
}
}
]
}
}
操作流程
|
序号 |
步骤 |
说明 |
|---|---|---|
|
1 |
创建代码检查任务所属的项目。 |
|
|
2 |
创建代码检查任务使用的代码仓。 |
|
|
3 |
创建带有“不可信的输入可能引起命令注入、格式化注入、SQL注入等注入类问题”规则的规则集。 |
|
|
4 |
创建模型集以及模型集中使用的模型文件。 |
|
|
5 |
创建使用模型集检查的代码检查任务。 |
|
|
6 |
配置代码检查任务使用的规则集和模型集。 |
|
|
7 |
配置代码检查任务使用带有自定义规则的自定义规则集。 查看检查结果,确认使用的模型是否生效。 |
创建代码检查任务所属项目
- 使用华为云账号登录华为云控制台页面。
- 单击页面左上角
,在服务列表中选择。 - 单击“立即使用”,进入CodeArts服务首页。
- 在首页单击,选用“Scrum”项目模板。项目名称填写“Scrum01”,其他参数保持默认即可。
- 单击“确定”后,进入到“Scrum01”项目下。
创建CodeArts Repo代码仓
- 在页面导航栏中选择。
- 进入代码托管页面,单击“新建仓库”。
- 在新建仓库页面,选择“按模板新建”。
- 单击“下一步”,搜索并选择“Cpp Demo”模板。
- 单击“下一步”,仓库名称填写“Repo01”,“自动创建代码检查任务”参数需要去除勾选。其他参数保持默认即可。
- 单击“确定”完成仓库创建。
- 在根目录下单击“helloworld.cpp”文件名,单击代码框右上角
,修改后的代码信息如下,然后单击“确定”。
#include <iostream> char *get_user_input(); void executeCmd(const std::string &command); int test01() { char *input = get_user_input(); std::string cmd(input); executeCmd(cmd); return 0; }
创建自定义规则集
- 在页面导航栏中选择。
- 在代码检查任务列表页,单击“规则集”页签,进入规则集列表页面。
- 单击“新建规则集”,在弹出的窗口设置“规则集名称”为“RuleList”,“检查语言”为“C/C++”。
- 单击“保存”,进入到“规则集配置”页面。
- 勾选“不可信的输入可能引起命令注入、格式化注入、SQL注入等注入类问题”规则。
- 单击右上角“保存”,完成自定义规则集创建。
创建模型集和模型
- 在代码检查任务列表页,单击“模型集”页签,进入模型集列表页面。
- 单击“新建模型集”,在弹出的窗口设置“模型集名称”为“ModelList”。
- 单击“确定”,进入到模型集配置页面。
- 单击“新建模型”。
- 单击“请上传模型文件”,选择提前准备中创建好的文件,单击“确定”。
- 在“使用状态”为“未启用”的模型中勾选创建的模型,单击“保存”,然后在弹出的窗口中单击“确定”。
图1 选择模型
创建代码检查任务
- 在代码检查任务列表页,单击“新建任务”,按照如下表格配置参数。
表2 代码检查任务参数说明 参数
说明
归属项目
创建代码检查任务所属项目中创建的项目名称“Scrum01”。默认填写,无需配置。
代码源
选择需要检查的代码来源。选择“Repo”。
任务名称
代码检查任务名称,可自定义。例如:CheckTask01。
仓库
选择创建CodeArts Repo代码仓中创建的代码仓“Repo01”。
分支
保持默认“master”即可。
检查语言
选择“C/C++”。
- 单击“确定”,完成代码检查任务的创建。
查看检查结果
- 在代码检查页面任务列表中,搜索创建代码检查任务创建的任务名称“CheckTask01”。
- 单击任务名称,单击“检查日志”,在日志中搜索到如下的信息,表示本次执行的代码检查的任务使用了上传的模型文件中的规则。
图3 检查结果
- 查看“代码问题”,可查看到该模型对应的代码问题。
图4 代码问题




