ocsf/ocsf-validator
GitHub: ocsf/ocsf-validator
OCSF 模式验证器,解决模式贡献中的人工错误与包含复杂性问题。
Stars: 12 | Forks: 6
# OCSF Schema Validator
一个用于验证 [OCSF 模式](https://github.com/ocsf/ocsf-schema) 贡献的工具,旨在防止在贡献模式时出现人为错误,以保持模式可被机器读取。
OCSF 提供了多种包含机制以促进复用,但这意味着单个模式文件可能不完整。这使得使用现成的模式定义工具进行验证变得复杂。
[查询](https://www.query.ai) 是一个将异构安全数据规范化为 OCSF 的联邦式搜索解决方案。该验证器借鉴了 Query 团队编写的活跃代码和文档生成工具。
## 快速开始
### 先决条件
- Python >3.11
- pip
- [OCSF 模式](https://github.com/ocsf/ocsf-schema) 的副本
### 安装
你可以使用 `pip` 安装验证器:
```
$ pip install ocsf-validator
```
## 用法
你可以针对你正在工作的模式副本运行验证器,以在提交拉取请求之前识别问题。调用验证器使用 `python` 并提供工作副本根目录的路径。
示例:
```
$ python -m ocsf_validator .
$ python -m ocsf_validator ../ocsf-schema
```
## 测试
验证器会对模式副本执行以下测试:
- 模式可读且所有 JSON 有效。[致命错误]
- 目录结构符合预期。[警告]
- `$include`、`profiles` 和 `extends` 指令中的目标可被找到。[错误]
- 所有必需属性在模式定义文件中存在。[警告]
- 模式定义文件中没有未识别的属性。[警告]
- 所有属性在属性字典中均被使用。[警告]
- 同一记录类型内没有名称冲突。[警告]
- 所有属性均在属性字典中定义。[警告]
如果任何错误或致命测试失败,验证器将以非零退出码退出。
## 技术概述
OCSF 元模式通过文件路径表示为记录类型,实现方式如下:
1. 记录类型使用 Python 的类型系统表示,在 `types.py` 中将其定义为 Python `TypedDict`。这使验证器可以利用 Python 的反射能力。
2. 文件和记录类型通过匹配文件路径的模式进行关联。这些模式在 `matchers.py` 中命名,以便类型检查器捕获错误。
3. 类型在 `type_mapping.py` 中映射到文件路径模式。
待验证的 OCSF 模式内容主要由 `reader.py` 中定义的 `Reader` 表示。`Reader` 从源(通常来自文件系统)加载要验证的模式定义并原样包含它们。`processor.py` 中的 `process_includes` 函数及其他内容通过应用 OCSF 的各种包含机制来变更 `Reader` 的内容。
验证器定义在 `validators.py` 中,用于测试模式内容是否存在各种问题。验证器应将 `Exception` 传递给 `errors.py` 中定义的特殊错误收集器。该模块还定义了多种表示问题模式状态的自定义异常类型。`Collector` 默认抛出错误,但也可以暂存错误,直到被更大的验证过程(例如 `ValidationRunner`)聚合。
`ValidationRunner` 将上述所有构建块组合在一起,从文件系统读取提议的模式,验证模式,并在遇到错误时提供有用的输出和非零退出码。
标签:CLI 工具, JSON Schema, OCSF, Python 工具, Python 验证器, Query, Schema 校验, 元数据验证, 包含引用校验, 命名冲突检测, 安全数据标准化, 安全数据规范化, 安全贡献, 属性完整性校验, 模式工具, 模式校验, 模式验证, 目录结构校验, 逆向工具, 预提交检查