@codacy/tools-opgrep-1 (英语)
目录
概览
多语言的 SAST (Static 应用程序安全测试) 扫描仪 打开( O) 二进制. 通过YAML规则文件支持30+语言. 使用CLI执行策略.
| 财产 | 数值 |
|---|---|
| 工具标识 | Semgrep (legacy,用于Codacy平台相容性) |
| 显示名称 | Opengrep |
| 编码 UUID | 6792c561-236d-41b7-ba5e-9d6bee0d548b |
| 战略 | 国 际 |
| 语文 | 30+ (Python, JavaScript, TypeScript, Java, Go, Ruby, C, C++等) |
| 二进制 | opengrep |
| 文件图案 | 由上述语言衍生出来的 ~70 扩展 Dockerfile |
| 图案计数 | ~2500 时 |
| 额外依赖性 | yaml (用于 YAML 规则配置解析/ 生成) |
规则捆绑
Opengrep使用YAML规则文件进行检测. 适配器将~2500规则捆入 src/rules.yaml,来源于:
- 打开/打开规则 - 登记规则,与Codacy图像相同
- GitLab SAST 规则 麻省理工学院有执照,从
gitlab.com/gitlab-org/security-products/sast-rules - 编码习惯规则 —— 说
docs/codacy-rules*.yaml内codacy/codacy-opengrep
捆绑起来 src/rules.yaml 实值 承诺保存库 为了一致性和可复制性.
保持与科达西图像同步
所有三个来源,他们的被钉住的承诺 和他们的文件过滤器都是从
codacy/codacy-opengrep是因为 internal/docgen/parsing.go。保持这样:图像是
参考执行情况,以及 scripts/fetch-rules.mjs 说每个部件的上游函数
是从哪来的.
镜像成本中的三个错误 2534种模式中的296种(12%)他们都沉默了..
模式在 patterns.json, (中文(简体) ), init --auto 允许它, 配置 声称它是活跃的
它只是永远不要开火:
- 规则 ID 来源于文件路径 . GitLab ids 在文件中写入, 必须是
逐字记录。 路径导出对顶层树的右侧(
java/crypto/rule-X.yml真的很坚持java_crypto_rule-X),对于许可级别之一是错误的,其中rules/lgpl-cc/properties/spring/accesscontrol/rule-Y.yml持有properties_spring_rule-Y编辑 最尖锐的情况是rule-JwtDecodeWithoutVerify.yml,其编号使用下划线 文件名使用连字符 。 588 GitLab规则中的265条由此被丢失. - 登记册来源在上游
semgrep/semgrep-rules而不是Opengrep的叉子 两者之分 大部分的id,所以输出看起来是可信的,而个别规则却丢失了. - YAML被逐行读取并重写. 腐败的多线流出-
已生成文件已停止解析, 然后报告 opengrep 整个运行的零结果
而不是错误,它每逢
tests/目录,一些运出规则所在的地方.
test/rules-coverage.test.ts 是守护者:如果编目模式没有规则,则失败,如果
生成的文件不解析。 运行 pnpm fetch-rules ;脚本打印
孤儿身份证明.
更新图案
# Re-fetch pattern metadata from the Codacy API
pnpm prefetch
# Commit the result
git add src/patterns.json
模式 ID 遵循格式 Semgrep_python.lang.security.audit.exec-detected.exec-detected (dot-分出规则路径).
更新规则
# Re-fetch and bundle rules from all three sources
pnpm fetch-rules
# This clones the rule repos, extracts matching rules, and writes src/rules.yaml
# Only rules whose IDs match src/patterns.json are included — and the script now
# warns loudly about the reverse, a catalogued pattern with no rule to run.
# Commit the result
git add src/rules.yaml
这个 fetch-rules 脚本( e)scripts/fetch-rules.mjs:
- 克隆
semgrep/semgrep-rules在坚固的战火中 - 克隆人GitLab SAST规则(最新)
- 克隆
codacy/codacy-opengrep习惯规则 - 提取规则, 指定基于路径的ID
- 过滤到只匹配规则
src/patterns.json - 将缩写 YAML 写入
src/rules.yaml
要更新被绑定的规则, 请编辑 SEMGREP_RULES_COMMIT 内 scripts/fetch-rules.mjs。 。 。 .
更新 Opengrep 版本
- 更新
preferredVersion内src/adapter.ts - 运行
pnpm test以验证兼容性 - 考虑重新运行
pnpm fetch-rules如果新版本支持新的规则语法
发展
pnpm build # Build with tsup
pnpm test # Run tests (requires opengrep in PATH)
pnpm fetch-rules # Re-bundle rules from upstream sources
pnpm prefetch # Re-fetch pattern metadata from Codacy API
安装二进制 :
适配器自动安装打开grep ~/.codacy/tools/ 当运行时
--install-dependencies (不需要手工步骤):
codacy-analysis analyze . --tool opengrep --install-dependencies
install() 从 GitHub 发布时下载匹配的静态链接二进制
(无归档可解开)和 chmod +x因为它(不在Windows上). 这个
平台/arch/libc — 资产映射镜 opengrep 官方 install.sh 财务报告和审定财务报表
install.ps1数字 :
| 平台 | 资产 |
|---|---|
| macOS x64 | opengrep_osx_x86 |
| 马可斯臂64 | opengrep_osx_arm64 |
| Linux x64 (glibc) (英语) | opengrep_manylinux_x86 |
| Linux arm64 (glibc) (英语) | opengrep_manylinux_aarch64 |
| Linux x64( 穆斯/ 阿尔卑斯) | opengrep_musllinux_x86 |
| Linux arm64(母马/高山) | opengrep_musllinux_aarch64 |
| 视窗 x64 | opengrep_windows_x86.exe |
| Windows arm64(已装入) | opengrep_windows_x86.exe |
要手动安装 :
curl -fsSL https://raw.githubusercontent.com/opengrep/opengrep/main/install.sh | bash
# Windows (PowerShell)
irm https://raw.githubusercontent.com/opengrep/opengrep/main/install.ps1 | iex
维护者的注释
-
预设绘图
src/pattern-mappings.json(中文(简体) ): 前缀是上游规则路径 (单位:千美元)Semgrep_<lang>.<framework>.…)),它已经命名了框架,所以这个映射是 前缀只 —— Opengrep 的标签为主题(security, (中文(简体) ),audit并会过度竞争。 22个密钥 添加,从缺少框架的重置中取出 ~91 默认模式: Pyramid (16), PyCryptodome (12), Kubernetes/Helm (14,通过)yaml.kubernetes.+ 键codacy.k8s.; 数据kubernetes信号匹配 松动的列表k8s/编号 :kubernetes/编号 :manifests/不仅仅是kustomization.yaml,或 最常见的布局会失去全部 14), GitHub 动作 (5),AWS CDK (5),Jinja2 (2),以及较小的Boto3/Twilio/Android/Sequelize/Doctrine家族. YAML语言家庭最为重要:在此之前,他们发射任何含有单声道的回弹.yaml文档.这个
*.aws-lambda.包( Python、 JavaScript、 Ruby 和 Go 三十四个默认) 以 页:1 键 -serverless-framework, (中文(简体) ),cloudformation, (中文(简体) ),aws-cdk, (中文(简体) ),boto3, (中文(简体) ),aws-sdk, (中文(简体) ),aws-sdk-go财务报告和审定财务报表lang:Terraform。掌上电脑代码没有自己的显示;唯一的 证据是它是如何部署的 或者它叫哪个SDK 任何七个都足够了. Terraform 赚了一把钥匙 因为布置了一辆Lambdaaws_lambda_function没有别的了 跟踪,SDK的分录 不得不学习npm的v2aws-sdk,Go's v1 (英语)aws-sdk-go还有PyPI的botocore编号 :aws-lambda-powertools- 兰布达跑步时间 预装机器人3,所以它经常缺席 从requirements.txt完全没有.Semgrep_python.jinja2.索赔人jinja2财务报告和审定财务报表flask: 火焰硬依赖金贾2, 如此直视jinja2单是声明就放弃了两个错误- 严重性自定义规则 从最真实的火焰回放.蓄意地仍然普遍, 以测试为戒, 所以它保持这样:
*.lang.*(通用每语包),csharp.dotnet.(平台,不是图书馆),terraform.*(已登入Terraform语言,problem-based-packs.*(各语种),和apex.编号 :generic.visualforce.- 顶级和视觉力量 仅限销售 语言,所以语言门 已经瞄准它们 并按键它们上salesforce只会增加一种方式 想念他们 在销售力回购 没有sfdx-project.json。 。 。 . -
工具标识是
Semgrep与 Codacy 平台的相容性。 这个displayName设置为Opengrep用于 CLI 显示。 不与Codacy平台团队协调,永远不要更改工具ID. -
配置化: 当指定codacy 模式时,适配器加载
src/rules.yaml,过滤以启用规则,并写入过滤后配置.codacy/generated/opengrep-rules.yaml。 。 。 . -
检查为空规则 ID: 每张引用证
--no-rewrite-rule-ids。没有它 Opengrep 前缀check_id与配置文件的目录相对 cwd (.codacy/generated/x.yaml→codacy.generated.)),而适配器曾复制该路径数学以再次剥去前缀——从未在Windows上核实过,其中不匹配会在被启用的样板检查时默不作声地放下每个发现. 用旗子将规则ID映射到每个OS上直接显示的图案ID. -
配置文件搜索数字 :
.semgrep.yaml, (中文(简体) ),.opengrep.yaml, (中文(简体) ),.semgrep.yml, (中文(简体) ),.opengrep.yml(按此顺序排列). -
Opengrep 错误: 从 Opengrep 的 JSON 解析错误( 语法错误, 部分解析)
errors数组转换为结构AnalysisError对象为filePath. Stderr (扫描状态表) 仅记录在调试级别上. -
规则标识格式: 使用Semgrep规则
{dir}.{filename}.{ruleId}GitLab 规则{dir}_{filename}(下分数) Codacy自定义规则保留其原始ID. -
安装/ 二进制下载数字 :
install()从https://github.com/opengrep/opengrep/releases/download/v{version}/{asset}财务报告和审定财务报表chmod +x如果它进入~/.codacy/tools/。释放标签带有v前缀( e)v1.30.0虽然preferredVersion没有。 在 Linux 上检测出 libc 味道ldd /bin/sh探测器musl→ musllinux, else manylinux; 检测失败回落到glibc/manylinux. 在 Windows 上,二进制保存为opengrep.exe; 上游仅建有 x64, 而install.ps1也安装在ARM64上(已装入),所以我们也这样做. 从opengrep 2.0.0开始 Windows 资产变成opengrep_windows_x86.zip(exe + DLLs)——起落架preferredVersion超过2.0需要一个取出步骤。 argv 块预算下降至MAX_ARGV_BYTES(30,000) 在Windows上,其命令行被封顶为32,767个字符. 与安装.sh不同,Codacy管理的安装确实 没有 校验联合签名.cert编号 :.sig签字——如果签字核查成为一种要求,则取出这些兄弟般的资产,并在chmod之前进行验证. -
Argv 大小块( 没有目录行走):适配器总是通过 Opengrep a 清晰的文件列表 ——跑者已经被被git-ignored,排斥-被过滤的目标设定——因此Opengrep从不走寄存树本身.
chunkFilesByArgvBudget()将列表分割为 最少,最大的一个 每个适合的块ARGV_BYTE_BUDGET(200KB,列在ARG_MAX),每个块被扫描opengrep scan引用;发现和出错合并成块. 弹出 大小, 不计数:每次引用重新编译rules.yaml,因此少/多块摊还固定成本。 先前的目录/“root”倒置被删除,因为大型倒置(Repo根的一个单一跟踪文件崩溃了最小覆盖的凹陷到.它使Opengrep走出整个树——重新扫描排除/生成/复仇文件,并在跑者10分钟的限时时间出局. -
文件大小上限: 引用通过
--max-target-bytes 1000000(~1 MB). 这还原了 Opengrep 的默认大小上限—— 适配器先前通过0,哪个 禁用 如此巨大的生成/微缩的捆绑被扫描 并占据运行时间 上限适用于明确列出的文件(在v1.16.4上核实)。 说明:--exclude-minified-files实值 没有 使用 —— 除非--experimental(不同的引擎)也被通过,所以我们依靠大小盖来取而代之. (在文件到达适配器之前,跑者还集中执行每个文件更紧的150 KB限制,所以--max-target-bytes现在是一个二级防御。 ) -
超时部分结果: 每堆循环检查
ctx.signal(跑者暂停比赛) 在块之间,并传递给spawnTool因此,飞行中扫描被迅速杀死。 中止时,适配器将结果保存在完成的块上并添加一个Timeout出错(-)status: "partial"而不是失去所有的东西。 这就是为什么在ARG MAX之外块块的事物:这是在保留结果的情况下可以停止长扫描的颗粒性.