CodeQL CLI入门
一、CodeQL CLI 安装和配置
1.下载CodeQL CLI 压缩包
https://github.com/github/codeql-cli-binaries/releases
2.创建CodeQL目录,如$HOME/codeql-home
3.创建CodeQL查询的本地拷贝
CodeQL仓库包含分析C/C++, C#, Java, JavaScript、python等所需的查询和库文件。需要拷贝一份仓库到codeql-home目录,重命名仓库文件夹为codeql-repo
仓库下载地址:https://github.com/github/codeql
- go的仓库地址:https://github.com/github/codeql-go/
- 假设CodeQL仓库目录为$HOME/codeql-home/codeql-repo,那么go的仓库目录可以设置为$HOME/codeql-home/codeql-go
4.解压CodeQL CLI 压缩包$HOME/codeql-home目录
5.运行CodeQL
(1)通过直接执行$HOME/codeql-home/codeql/codeql来运行CodeQL
(2)将$HOME/codeql-home/codeql目录添加到环境变量
二、创建CodeQL数据库
命令:
codeql database create <database> --language=<language-identifier>
参数说明:
<database>:创建的数据库的路径,必须是不存在的文件夹
--language:如下
| C/C++ | cpp |
| C# | csharp |
| Go | go |
| Java | java |
| JavaScript/TypeScript | javascript |
| Python | python |
其它参数:
--source-root 指定数据库创建时的源文件根目录,默认为当前目录。
--command 指定语言的编译命令,不要给python和JavaScript指定该命令。
非编译型语言创建数据库
codeql database create --language=javascript --source-root <folder-to-extract> <output-folder>/javascript-database
三、使用CodeQL CLI分析数据库
命令:
codeql database analyze <database> <queries> --format=<format> --output=<output>
参数说明:
<database> 预分析的数据库路径
<queries> 要在数据库上运行的查询。可以指定一个或多个单独的查询文件,指定将以递归方式搜索查询文件的目录,或者命名定义了一组特定查询的查询套件。
--format 分析生成的结果文件的文件格式
--output 分析结果的输出路径
还可以通过--threads指定运行查询时要使用的线程数。默认选项是1
示例:
codeql database analyze <javascript-database> ../ql/javascript/ql/src/Declarations/UnusedVariable.ql --format=csv --output=js-analysis/js-results.csv
上述分析的结果会在新创建的文件夹js-analysis下的js-results.csv文件中输出
运行目录中的所有查询
您可以通过提供目录路径而不是列出所有单个查询文件来运行目录中的所有查询。路径是递归搜索的,因此子文件夹中包含的所有查询也将被执行。
重要
您不应在执行
database analyze时指定QL包的根目录, 因为它包含一些并非为命令使用而设计的特殊查询。相反,要运行各种有用的查询,请运行LGTM.com查询套件之一。
例如,要执行Functions 目录中包含的所有Python查询,您将运行:
codeql database analyze <python-database> ../ql/python/ql/src/Functions/ --format=sarif-latest --output=python-analysis/python-results.sarif
会生成一个SARIF结果文件。通过--format=sarif-latest可确保结果根据CodeQL支持的最新SARIF规范进行格式化。
结果
您可以将分析结果保存为多种不同格式,包括SARIF和CSV。
SARIF(数据分析结果交换格式)是定义输出文件格式的OASIS 标准。 SARIF 标准用于简化静态分析工具分享其结果的方式。 有关更多信息,请参见SARIF概述。
如果选择将结果生成为CSV,则输出的每条告警将包含以下信息:
| 名称 | 标识结果的查询名称。 | Inefficient regular expression |
| 描述 | 查询的描述。 | A regular expression that requires exponential time to match certain inputs can be a performance bottleneck, and may be vulnerable to denial-of-service attacks. |
| 严重程度 | 查询的严重性。 | error |
| 信息 | 告警消息。 | This part of the regular expression may cause exponential backtracking on strings containing many repetitions of '\\\\'. |
| 路径 | 包含告警的文件的路径。 | /vendor/codemirror/markdown.js |
| 起跑线 | 触发告警的代码开始的文件行。 | 617 |
| 开始栏 | 起始行的列,用于标记告警代码的开始。第一列不包括在内。 | 32 |
| 终点线 | 触发告警的代码结束的文件行。与起始行相同时不包括在内。 | 64 |
| 结束栏 | 可能的话,在结束行的列中标记告警代码的结尾。否则,将重复结束行。 | 617 |
结果文件可以集成到您自己的代码审查或调试基础结构中。例如,SARIF文件输出可通过IDE的SARIF查看插件在源代码中的正确告警位置进行突出显示。
在CodeQL CLI中使用自定义查询
您可以通过编写自己的查询来突出显示特定的漏洞或错误,从而自定义CodeQL分析。
写一个有效的查询
在运行自定义分析之前,您需要编写一个有效的查询,并将其保存在带有.ql扩展名的文件中。有大量可用的文档可帮助您编写查询。有关更多信息,请参阅学习CodeQL帮助中的CodeQL查询。
包括查询的元数据
查询元数据包含在每个查询文件的顶部。它为用户提供有关查询的信息,并告诉CodeQL CLI如何处理查询结果。
使用命令运行查询时,必须包括以下两个属性,以确保正确解释结果:database analyze
- 查询标识符(
@id):小写字母或数字,通过分隔构成单词序列/或-,识别和查询进行分类。 - 查询类型(
@kind):标识查询是警报()还是路径()。@kind problem@kind path-problem
有关这些元数据属性的更多信息,请参见CodeQL查询的元数据和《查询元数据样式指南》。
注意
如果要与其他应用程序一起使用查询,则元数据要求可能会有所不同。有关更多信息,请参见学习CodeQL帮助 中的关于CodeQL查询。
CodeQL CLI入门的更多相关文章
- NET Core 环境搭建和命令行CLI入门
NET Core 环境搭建和命令行CLI入门 2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文 ...
- NET Core 环境搭建和命令行CLI入门[转]
NET Core 环境搭建和命令行CLI入门 时间:2016-07-06 01:48:19 阅读:258 评论:0 收藏:0 [点我收藏+] 标签: N ...
- .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...
- Spring boot 官网学习笔记 - Spring Boot CLI 入门案例
安装CLI https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/2.1.1.RELEASE/spring-b ...
- Vue -cli 入门 --项目搭建(一)
一. 安装node.js环境. 在node.js官网下载稳定版本(https://nodejs.org/en/) 下载完成后点击安装,安装过程很简单,一直next即可,安装完成会自动添加node及np ...
- Azure CLI 简单入门
Azure CLI 是什么 Azure 命令行接口 (CLI) 是用于管理 Azure 资源的 Microsoft 跨平台命令行体验. Azure CLI 易于学习,是构建适用于 Azure 资源的自 ...
- ABPHelper.CLI及其依赖项简单介绍
目录 目录 ABPHelper.CLI 入门 使用指南 命令行 技术点如下 Scriban 通过Microsoft.Extensions.FileProviders.Embedded获取嵌入资源 通过 ...
- 3D打印CLI文件格式的读取
CLI 英文全称:COMMON LAYER INTERFACE 中文名称:通用层接口. 推荐从官方网址看一下其完整的内容: (https://www.hmilch.net/downloads/cli_ ...
- .NET Core 系列5 :使用 Nuget打包类库
NuGet是个开源项目,项目包括 NuGet VS插件/NuGet Explorer/NuGetServer/NuGet命令行等项目,.NET Core项目完全使用Nuget 管理组件之间的依赖关系, ...
随机推荐
- PHP fgetcsv() 函数
定义和用法 fgetcsv() 函数从打开的文件中解析一行,校验 CSV 字段. fgetcsv() 函数会在到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止返回一个新行. 该函数如果成功 ...
- PHP xml_get_error_code() 函数
定义和用法 xml_get_error_code() 函数获取 XML 解析器错误代码.高佣联盟 www.cgewang.com 如果成功,该函数则返回错误代码.如果失败,则返回 FALSE. 语法 ...
- PHP substr_compare() 函数
实例 比较两个字符串: <?php高佣联盟 www.cgewang.comecho substr_compare("Hello world","Hello worl ...
- jzyz 题库 题目选做
题库中也有很多我想不出来的模拟赛的题目.做还是必要的.做自己的题目 时间很紧 想想自己的文化课 我又没有那么强 我必须得刷. LINK:水题一道 发现是一道计数题 计数题拿高分的才是王者,但是 计数题 ...
- 7.12 NOI模拟赛 探险队 期望 博弈 dp 最坏情况下最优策略 可并堆
LINK:探险队 非常难的题目 考试的时候爆零了 完全没有想到到到底怎么做 (当时去刚一道数论题了. 首先考虑清楚一件事情 就是当前是知道整张地图的样子 但是不清楚到底哪条边断了. 所以我们要做的其实 ...
- 牛客练习赛63 C 牛牛的揠苗助长 主席树 二分 中位数
LINK:牛牛的揠苗助长 题目很水 不过做法很多 想到一个近乎O(n)的做法 不过感觉假了 最后决定莽一个主席树 当然 平衡树也行. 容易想到 答案为ans天 那么一些点的有效增长项数为 ans%n. ...
- 剑指 Offer 57 - II. 和为s的连续正数序列
本题 题目链接 题目描述 我的题解 方法三双100%, 方法一 适合范围广 方法一:双指针(也叫 滑动窗口) 思路分析 用两个指针i和表示当前枚举到的以i为起点,j为终点的区间,sum表示[i,j]的 ...
- EACCES: permission denied,mkdir … npm install 安装依赖问题解决
强哥最近在用hugeGraph图库做二次开发的时候,在打包的时遇到前端项目打包失败的问题: cwebp-bin@4.0.0 postinstall /home/hugegraph/my-hugegra ...
- Swap常用操作与性能测试
Swap分区通常被称为交换分区,这块儿分区位于硬盘的某个位置,当系统内存(物理内存)不够用的时候,如果开启了交换分区,部分内存里面暂时不用的数据就会Swap out(换出)到这块儿分区:当系统要使用这 ...
- 为什么 2020 还要学 Node.js
更佳阅读体验 https://www.yuque.com/sunluyong/node 前言 前些日子刷知乎看到个 2019 年初的问题 2019年nodejs凉了吗?凉到什么程度了?才看到问题的时候 ...