sebrandon1/tls-config-lint

GitHub: sebrandon1/tls-config-lint

一个 GitHub Action,用于在 CI 中自动扫描多种语言代码库的 TLS 配置反模式和安全问题。

Stars: 0 | Forks: 0

# tls-config-lint 一个 GitHub Action,用于扫描代码库中 Go、Python、Node.js/TypeScript、C++、Java 和 Rust 项目的 TLS 配置反模式和安全问题。 ## 主要功能 - **86 种 TLS 反模式** — 涵盖 6 种语言,并提供严重性分类(严重、高、中、信息) - **PR 内联注解** — 扫描结果会直接显示在 Pull Request 中受影响的代码行上 - **SARIF 输出** — 可选的 GitHub 代码扫描集成 - **自动检测** — 通过文件标记(如 go.mod、package.json 等)自动发现项目使用的语言 - **可配置阈值** — 仅在扫描结果达到或高于您指定的严重性时才让 CI 失败 - **按模式屏蔽** — 可从结果中排除特定的模式 ID - **作业摘要** — 在 GitHub Actions 摘要中生成 Markdown 格式的扫描结果表 - **复合 Action** — 无需 Docker 构建开销 ## 快速开始 ### 1. 添加工作流 在您的代码库中创建 `.github/workflows/tls-lint.yml`: ``` name: TLS Lint on: [push, pull_request] jobs: tls-lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: sebrandon1/tls-config-lint@v1 ``` 大功告成 — 推送该文件,此 Action 就会自动检测您的项目语言并扫描 TLS 反模式。 ### 2. 了解输出结果 当检测到扫描结果时,它们会出现在三个地方: - **PR 注解** — 在您的 Pull Request 中受影响代码行上的内联评论 - **作业摘要** — 在 Actions 运行摘要中提供严重性表格和结果列表 - **退出代码** — 如果扫描结果达到或超过严重性阈值,该步骤将失败(退出码为 1) 每条扫描结果都包含一个指向其[修复文档](docs/patterns.md)的链接,其中提供了不安全/安全的代码示例。 ### 3. 解释严重性级别 | 级别 | 含义 | 示例 | |-------|---------|----------| | **CRITICAL (严重)** | 验证被禁用、NULL 密码 | `InsecureSkipVerify: true`, `verify=False` | | **HIGH (高)** | 弱 TLS 版本、损坏的密码 | TLS 1.0/1.1, RC4, 3DES | | **MEDIUM (中)** | 阻碍 TLS 1.3 的采用 | `MaxVersion: TLS 1.2` | | **INFO (信息)** | 后量子、已弃用的功能 | PQC/ML-KEM, `PreferServerCipherSuites` | 默认情况下,当级别为 HIGH 或更高时,此 Action 将失败。更改阈值: ``` - uses: sebrandon1/tls-config-lint@v1 with: severity-threshold: critical # only fail on critical findings ``` ### 4. 屏蔽误报 **内联屏蔽** — 在受影响的行上添加注释: ``` InsecureSkipVerify: true, // tls-lint:ignore ``` **按模式屏蔽** — 排除特定的模式 ID: ``` - uses: sebrandon1/tls-config-lint@v1 with: exclude-patterns: insecure-skip-verify,hardcoded-tls-config ``` **按文件屏蔽** — 创建一个 `.tls-config-lint.yml` 配置文件: ``` exceptions: - insecure-skip-verify:test_helpers.go - min-version-tls10:internal/legacy/ ``` 有关所有选项(包括严重性覆盖、报告输出和调试模式),请参阅[配置](docs/configuration.md)。 ### 5. 启用 GitHub 代码扫描(可选) 添加 SARIF 输出,以便在 Security(安全)选项卡中查看结果: ``` - uses: sebrandon1/tls-config-lint@v1 with: sarif-output: tls-lint.sarif fail-on-findings: false - uses: github/codeql-action/upload-sarif@v3 with: sarif_file: tls-lint.sarif if: always() ``` ## 输入项 | 输入项 | 默认值 | 描述 | |-------|---------|-------------| | `severity-threshold` | `high` | 导致失败的最小严重性:`critical`, `high`, `medium`, `info` | | `languages` | `auto` | 以逗号分隔:`go,python,nodejs,cpp,java,rust` 或使用 `auto` 自动检测 | | `exclude-dirs` | _(空)_ | 需要排除的额外目录(以逗号分隔) | | `exclude-patterns` | _(空)_ | 需要屏蔽的模式 ID(以逗号分隔) | | `config-file` | `.tls-config-lint.yml` | 可选的代码库配置文件路径 | | `scan-path` | `.` | 要扫描的目录 | | `fail-on-findings` | `true` | 是否在扫描结果高于阈值时让 CI 失败 | | `sarif-output` | _(空)_ | 写入 SARIF 文件的路径(留空 = 禁用) | | `report-output` | _(空)_ | 写入 CSV 或 JSON 报告的路径(格式由扩展名推断) | | `debug` | `false` | 显示每条扫描结果匹配到的 regex | ## 输出项 | 输出项 | 描述 | |--------|-------------| | `findings-count` | 扫描结果总数 | | `critical-count` | 严重扫描结果数量 | | `high-count` | 高严重性扫描结果数量 | | `medium-count` | 中严重性扫描结果数量 | | `info-count` | 信息级别扫描结果数量 | | `sarif-file` | SARIF 文件路径(如果已生成) | | `report-file` | 报告文件路径(如果已生成) | | `scan-duration` | 扫描持续时间(例如 `3s`) | ## 指南 | 指南 | 描述 | |-------|-------------| | [检测到的模式](docs/patterns.md) | 涵盖 6 种语言的全部 86 种模式 | | [配置](docs/configuration.md) | 配置文件、高级用法示例、退出代码 | | [内置排除项](docs/exclusions.md) | 默认排除的目录和测试文件 | ## 开发 ``` bash tests/run_tests.sh # Run all unit tests shfmt -d -i 0 -ci . # Check formatting shellcheck -S warning entrypoint.sh lib/*.sh patterns/*.sh tests/*.sh # Static analysis ``` ## 贡献 欢迎您的贡献!请随时提交 issue 和 Pull Request。 ## 许可证 Apache License 2.0 - 详情请参阅 [LICENSE](LICENSE)。
标签:DInvoke, GitHub Action, JS文件枚举, MITM代理, SARIF, TLS/SSL, 可视化界面, 应用安全, 日志审计, 逆向工具, 静态代码扫描