globstar:一款强大的静态代码分析工具
在现代软件开发中,代码质量与安全性是至关重要的。globstar 是一款开源的静态代码分析工具,能够帮助开发人员和安全工程师轻松编写代码分析检查器,并通过单一的可移植二进制文件运行它们。下面,我们将详细介绍globstar的核心功能、技术分析、应用场景以及它的独特特点。
项目介绍
globstar 是一个基于 Go 语言编写的静态代码分析工具,利用 tree-sitter 进行强大的基于AST的分析,同时提供了一个简单直观的界面,使用 tree-sitter 查询语言编写检查器。你可以从 YAML 接口开始编写简单的检查器,然后过渡到 Go 接口,以实现更复杂的检查器,后者提供了对 tree-sitter AST、导入和作用域解析以及复杂逻辑的访问。
在你的代码库中创建一个 .globstar
目录,将所有检查器放在该目录下,然后使用 globstar check
命令运行它们,操作非常简单。
项目技术分析
globstar 的核心是 tree-sitter,这是一个用于构建解析器的库,它能够生成用于分析代码的高性能解析器。tree-sitter 使用 S-表达式语法来定义查询,这使得编写代码检查器变得简单而直观。globstar 利用这一点,为用户提供了一个易于使用的接口,允许他们定义自己的检查器,而不需要学习复杂的领域特定语言。
globstar 的架构设计考虑了性能,适合大型代码库的分析。它作为一个单独的二进制文件分发,无需担心依赖问题。这使得 globstar 在持续集成(CI)环境中非常方便使用。
项目及技术应用场景
globstar 的应用场景非常广泛,适用于任何需要代码分析和安全检查的场合。以下是一些具体的应用场景:
- 代码质量保证:globstar 可以用来检查代码风格、错误和潜在的代码缺陷,确保代码库的总体质量。
- 安全审计:通过检查潜在的安全漏洞,如不当使用
eval()
函数,globstar 能够帮助开发人员及时发现并修复安全问题。 - 持续集成(CI):在 CI 流程中集成 globstar,可以在代码合并前自动执行检查,确保代码质量和安全性。
项目特点
以下是 globstar 的几个主要特点:
- 闪电般的速度:globstar 采用 Go 语言编写,设计上注重速度和效率,非常适合大型代码库。
- 原生支持 tree-sitter:使用 tree-sitter 的 S-表达式语法编写检查器,简化了编写过程,同时也支持 Go 接口,为更复杂的检查器提供了更多灵活性。
- CI友好:globstar 可以轻松地集成到任何 CI/CD 管道中,无需安装依赖,自动检测
.globstar
目录并运行所有检查器。 - 真正的开源:globstar CLI 及其所有内置检查器均遵循 MIT 许可,可以在商业项目中自由使用,没有许可陷阱。
使用 globstar
安装
curl -sSL https://get.globstar.dev | sh
此命令将最新版本的 globstar 下载到当前目录的 ./bin/globstar
。你也可以通过设置 BINDIR
环境变量来指定不同的安装目录。
编写检查器
在你的代码库根目录下创建一个 .globstar
文件夹,并在其中编写自定义检查器。每个检查器都在一个单独的 YAML 文件中定义,文件名是检查器的标识符,tree-sitter 的 S-表达式查询定义了要匹配的模式。
例如,以下是一个检测 Python 中可能危险使用 eval()
函数的检查器:
# .globstar/dangerous_eval.yml
language: python
name: dangerous_eval
message: "检测到危险使用 eval()。请使用 ast.literal_eval() 或适当的序列化方法。"
category: security
severity: critical
pattern: >
(call
function: (identifier) @func
(#eq? @func "eval")
arguments: (argument_list
[
(identifier)
(binary_operator)
]
)
) @dangerous_eval
在 CI 中运行
在 CI/CD 管道中运行 globstar 非常简单,只需下载二进制文件并运行 globstar check
命令即可。
以下是一个使用 GitHub Actions 的示例:
name: Run Globstar Analysis
on:
pull_request:
push:
branches: [ main ]
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Globstar
run: curl -sSL https://get.globstar.dev | sh
- name: Run Globstar checks
run: ./bin/globstar check
这将运行 .globstar
目录中的所有检查器和 globstar 自带的内置检查器,如果发现任何问题,工作流将失败。
为什么选择 globstar?
应用安全(AppSec)和运维(DevOps)团队对其代码库有许多学到的知识,包括安全漏洞和性能瓶颈。系统地在整个代码库中执行这些学到的模式对于保持代码质量并防止安全事件至关重要。
然而,创建自定义检查器一直很困难——要么妥协使用通用检查器,要么投入大量精力构建自定义工具。在 DeepSource,我们花费了5年多的时间构建和完善静态分析器,每天处理数百万行代码。这段经验教会了我们团队在自定义检查器引擎中需要的确切功能——它必须快速、易于编写,而不需要编译领域的博士学位。
因此,我们构建了 globstar。你不需要学习新的领域特定语言,可以直接使用 tree-sitter 熟悉的查询语法编写检查器。如果你需要更多功能,可以写 Go 语言的自定义检查器,并完全访问 AST。
我们还确保 globstar 真正地开源,遵循 MIT 许可。你的工具不应该带有附加条件。你可以自由地使用 globstar,按需修改,并相信它将继续可用。没有许可陷阱。
如果你使用 DeepSource,globstar 将在未来无缝集成——让你可以运行自定义检查器,同时使用我们的专有分析器。但这是可选的。globstar 作为一款强大的开源工具,能够独立满足需要执行自定义标准的团队的需求。
文档
你可以在 官方文档 中找到 globstar 的完整文档。
总结来说,globstar 是一款功能强大、易于使用且完全开源的静态代码分析工具,适用于各种规模的代码库,无论是确保代码质量还是提高安全性,globstar 都是一个值得尝试的选择。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考