「 CodeQL从入门到精通系列 」03.CodeQL常用术语介绍

相比其他代码检测工具,CodeQL中定义了很多专用术语,为了更快上手后续章节,本文对接下来要用到的术语做了统一汇总与解读。

1. 查询语言(QL)

QL是一种声明性、面向对象的查询语言,经过优化,可实现对分层数据结构(尤其是表示软件项目的数据库)的高效分析。查询语言的用途是提供一个编程平台,可以在其中查询有关数据库中存储的信息。

2. SARIF文件

静态分析结果交换格式(Static Analysis Results Interchange Format,SARIF)是一种用于共享静态分析结果的输出格式。有关更多信息可参阅SARIF官方文档。

3. bqrs文件

一种二进制查询结果集(Binary Query Result Set,BQRS)文件。BQRS是查询原始结果的二进制表示,扩展名为.BQRS。BQRS文件可以解释为有意义的结果,并与源代码相关。例如,告警查询结果被解释为在源代码中告警发生的位置显示字符串,就像在QL中指定的那样。类似地,路径查询结果被解释为信息可以在其之间流动的位置对(sources和sinks)。这些结果可以导出为各种不同的格式,包括SARIF格式。

4. QL数据库规范(QL database schema)

QL数据库规范?是描述构成原始QL数据集的列类型和扩展关系的文件。它是一个扩展名为.dbscheme的文本文件。
一种语言的提取器和核心CodeQL包分别声明它们使用的数据库模式。这定义了他们创建或期望的数据库布局。创建CodeQL数据库时,提取器会将其模式复制到数据库中。CLI使用它来检查CodeQL数据库是否与特定的CodeQL库兼容。如果它们不兼容,您可以使用数据库升级来升级CodeQL数据库的架构。

目前还没有面向公众的模式语法规范。

5. TRAP文件

TRAP文件是由扩展名为.TRAP的CodeQL提取器生成的UTF-8编码文件。为了节省空间,通常会将其压缩存档。TRAP文件包含在相对于QL数据库进行解释时用于创建QL数据集的信息。

6. CodeQL数据库(CodeQL database)

CodeQL数据库是一个目录,主要包含如下信息:

  • 从代码中提取的可查询数据。
  • 源引用,用于在代码中直接显示查询结果。
  • 查询结果。
  • 在数据库创建、查询执行和其他操作期间生成的日志文件。

7. .qlo文件

在查询编译过程中,可以选择生成.qlo文件。如果为codeql查询编译指定–dump-qlo选项,则codeql会为其编译的查询写入.qlo文件。它们可以作为高级用户调试和性能调优的辅助工具。

qlo是一种二进制格式,它表示根据关系代数(RA)或中间DIL格式编译和优化的查询。可以使用codeql查询反编译将qlo文件扩展为可读文本。

在不同CLI版本之间,.qlo格式的确切细节可能会发生变化,而不会发出任何警告。

8. 提取器(Extractor)

提取器是一种为每个输入文件生成关系数据和源引用的工具,从中可以构建CodeQL数据库。它是CodeQL引擎的关键组件。

9. DIL

DIL(Datalog Intermediary Language)是数据日志中间语言。它是QL和关系代数(RA)之间的中间表示,在查询编译过程中生成。DIL对于高级用户非常有用,有助于调试查询性能。

Note:当为codeql查询编译指定–dump-dil选项时,codeql会将dil打印到它编译的查询的标准输出中。当您在VS代码中运行查询时,可以以DIL格式查看结果。

10. CodeQL包(CodeQL packs)

CodeQL包用于创建、共享、依赖和运行CodeQL查询、库和模型。用户可以发布自己的CodeQL包,也可以下载其他人创建的包。CodeQL查询包可能包含查询、库文件、查询套件和元数据。CodeQL库包包括一个或多个CodeQL库。CodeQL模型包包括一个或多个数据扩展文件,这些文件通过对其他库和框架(代码库的依赖项)进行建模来扩展核心库。
比如在CodeQL 2.15.5版本中可以看到默认有如下主流语言的查询包
在这里插入图片描述

11. 数据扩展(Data extensions)

当我们想对自定义依赖项的sources和sinks进行建模时,可以创建一个CodeQL库(.qll文件)并编写使用它的查询,但创建数据扩展文件通常要简单得多。如果在数据扩展中对source和sink进行建模,则可以使用这些信息来扩展标准查询覆盖自定义依赖项,而不需要编写任何新的查询。

12. 查询套件(Qpack)

CodeQL 查询套件提供了一种基于文件名、磁盘或 QL 包中的位置或元数据属性来选择查询的方法。 为想要在 CodeQL 分析中经常使用的查询创建查询套件。

使用查询套件,可将多个查询传递给 CodeQL,而无需单独指定每个查询文件的路径。 查询套件定义存储在扩展名为 .qls 的 YAML 文件中。 套件定义是一系列指令,其中每条指令都是带有(通常)单个键的 YAML 映射。 指令按它们在查询套件定义中的显示顺序执行。 执行套件定义中所有指令后,结果为一组选定的查询。

Note:CodeQL有三个默认查询套件:

  • 1、code-scanning:默认情况下,查询在 GitHub 上的 CodeQL 代码扫描中运行。
  • 2、security-extended:来自 code-scanning 的查询,以及精度和严重性略低的额外安全查询。
  • 3、security-and-quality:来自 code-scanning、security-extended 的查询,以及额外的可维护性和可靠性查询。

13. 源引用(Source reference)

源引用是一种允许检索源文件内容的机制,给定文件在提取过程中所在的绝对文件名。具体示例包括:

  • 一个源归档目录,在该目录中,请求的绝对文件名映射到一个UTF8编码的文件。
  • 源归档文件,通常为ZIP格式,其中包含所有源文件的UTF8编码内容。
  • 源归档存储库,通常为git格式,通常为裸存储库,其中包含所有源文件的UTF8编码内容。

Note:CodeQL数据库中已经默认包含了源引用。

14. 参考

[1] https://learn.microsoft.com/zh-cn/training/modules/code-scanning-with-github-codeql/2-what-is-codeql
[2] https://codeql.github.com/docs/codeql-overview/codeql-glossary/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/306761.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kafka入门(六):日志分段(LogSegment)

日志分段(LogSegment) Kafka的一个 主题可以分为多个分区。 一个分区可以有一至多个副本,每个副本对应一个日志文件。 每个日志文件对应一个至多个日志分段(LogSegment)。 每个日志分段还可以细分为索引文件、日志存储…

mybatis plus相同Id与xml配置错误时,mybatis plus解决逻辑

前言 处理做项目的问题,其中不乏奇奇怪怪的问题,其中mybatis plus的问题感觉有点隐蔽,有些是运行时出现,有些是运行到具体的逻辑触发,对于应用的状态监控提出了极大的挑战,应用的状态由健康检查接口提供&a…

facebook广告的基础知识与类型

Facebook广告是在Facebook平台上展示的一种数字广告形式,它允许广告主通过定位特定的受众群体来推广他们的产品、服务或品牌。以下是一些关于Facebook广告的基础知识: 支持Facebook广告的卡、556150、532959,点击获取 广告形式: …

【Proteus仿真】【Arduino单片机】智能感应温控风扇

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602液晶显示模块、DS18B20温度、按键、声光报警、L293D电机驱动等。 主要功能: 系统运行后,LCD1602显示传感器检…

.NET Framework 与 .NET Core 与 .NET Standard 之间的差异

介绍 在本文中,我们将探讨 .NET Framework、.NET Core 和 .NET Standard 之间的差异。 .NET Framework 与 .NET Core .NET框架.NET核心 历史 .NET Framework 是 .NET 的第一个实现。 .NET Core 是 .NET 的最新实现。 开源 .NET Framework 的某些组件是开源的。 .N…

前端实现搜索功能

最近遇到一个需求,用户在输入框输入关键字之后,点击搜索按钮后进行搜索,如下图,选中的数据在下面,上面展现的是搜索后的数据,现在选中了2条数据: 当用户输入KET后点击搜索,搜出的结果有16条,勾选全选选中后,将选中的16条的数据加到之前已选的2条数据里,于是此时已选…

认识Linux指令之 “ head tail ” 命令

01.head指令 head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。 语法: head [参数]... [文件]... 功能&#…

SAP CO11N报工批次分割(拆分)

CO11N做报工的时候,下阶料启用了批次,比如需要过账4166个,但是每一批次的库存都不满足4166个,所以需要拆分(分割)处理 这个时候我们就需要对这一行做分割处理 选中这一行,点击‘分割’按钮 弹…

Speech | 语音克隆Openvoice的论文解读及项目实现

本文主要介绍了语音克隆Openvoice的论文以及项目实现~ 论文题目:OpenVoice: Versatile Instant Voice Cloning 论文地址:2312.01479.pdf (arxiv.org) 项目地址:https://github.com/myshell-ai/OpenVoice.git 官网:Home (myshell.a…

C 练习实例23

题目:打印出如下图案(菱形)。 * *** ***** ******* ***** *** * 题目分析: 先打印前4行,因为是递增关系。 第0行:打印3个空格,1个* 第1行:打印2个空格,3个*…

【Github-Action】GithubAction 环境下,如何将临时生成的文件推送至指定分支。

通过这篇文章你可以掌握如何将github action 环境下临时生成的文件推送至指定分支,并且可以打开利用github开放的api做各种强大或有趣的事情的视野和思路。 如果你对github-action感兴趣,还可以看这篇文章, 这篇文章教会你如何开发Github Act…

分布式系统架构设计之分布式消息队列中间件的技术选型报告

1、主流消息队列中间件 01 Kafka 基本原理 Kafka 基于发布-订阅模式,它维护了一个或多个 Topic,生产者将消息发送到 Topic,消费者从 Topic 中读取消息。Kafka 强调高吞吐量,通过批量处理、顺序 I/O 和零拷贝等技术实现高性能 …

微信扫码进入小程序特定页面

小程序配置 开发 - 开发管理 - 开发设置-普通链接二维码打开小程序 配置好的截图 如下:二维码规则建议是自己的域名 /mini/ 功能页面 pages/index/index 是为了方便跳转其他页面 记得把校验文件发给后端 web 端处理 二维码格式为:二维码规则/功能页…

基于 SpringBoot + magic-api + Vue3 + Element Plus + amis3.0 快速开发管理系统

Tansci-Boot 基于 SpringBoot2 magic-api Vue3 Element Plus amis3.0 快速开发管理系统 Tansci-Boot 是一个前后端分离后台管理系统, 前端集成 amis 低代码前端框架,后端集成 magic-api 的接口快速开发框架。包含基础权限、安全认证、以及常用的一…

2024美赛数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

【深度学习:数据增强】计算机视觉中数据增强的完整指南

【深度学习:数据增强】计算机视觉中数据增强的完整指南 为什么要做数据增强?等等,什么是数据增强?数据增强技术数据增强的注意事项和潜在陷阱什么时候应该做数据增强?类不平衡的数据增强那么我应该选择哪些转换呢&…

【Wordpress高级教程】 Wordpress免插件建立站群,wordpress整站迁移/安装

提示:该方法适用于Wordpress的站点,且无需插件哦(插件一般都需要付费的,博主比较穷,我们就通过技术来解决) 文章目录 前言一、准备工作二、搭建站群1.打包wp-content2.导入新站点3.导出数据库4.修改数据库配…

redis的高可用(主从复制、哨兵、群集)

redis的高可用(主从复制、哨兵、群集) 主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷&…

[Docker] Mac M1系列芯片上完美运行Docker

docker pull qinchz/dm8-arm64 container_name: dm8ports:- "5236:5236"mem_limit: 1gmemswap_limit: 1gvolumes:- /data/dm8:/home/dmdba/data 数据库实例参数已修改,接近oracle使用习惯 #字符集 utf-8 CHARSET1 #VARCHAR 类型对象的长度以字符为单位 …

vmware虚拟机内存异常占用问题一例

关键词 vmware esxi、hypervisor虚拟化平台内存模式 Guest virtual memory 一、问题现象 业务一台vmware虚拟机出现内存使用率告警,运维人员登录系统检查内存确实高水位状态 检查各进程使用内存不高,合计内存总数与使用率占用情况明显不匹配&#xf…