go-derive

遵循以下最佳实践的项目将能够自愿的自我认证,并显示他们已经实现了核心基础设施计划(OpenSSF)徽章。

没有一套可以保证软件永远不会有缺陷或漏洞的做法;如果规范或假设是错误的,即使合适的方法也可能失败。也没有哪些做法可以保证一个项目能够维持健康和运作良好的开发者社区。但是,遵循最佳做法可以帮助改善项目的成果。例如,一些做法可以在发布之前进行多人评估,这可以帮助您找到其他难以找到的技术漏洞,并帮助建立信任,并希望不同公司的开发人员之间进行重复的交互。要获得徽章,必须满足所有“必须”和“禁止”的条款,满足所有“应该”条款或有合适的理由,所有“建议”条款必须满足或未满足(至少希望考虑)。欢迎通过 GitHub网站创建问题或提出请求进行反馈。另外还有一个一般讨论邮件列表

如果这是您的项目,请在您的项目页面上显示您的徽章状态!徽章状态如下所示: 项目12775的徽章级别为passing 这里是如何嵌入它:
您可以通过将其嵌入在您的Markdown文件中:
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12775/badge)](https://www.bestpractices.dev/projects/12775)
或将其嵌入到HTML中来显示您的徽章状态:
<a href="https://www.bestpractices.dev/projects/12775"><img src="https://www.bestpractices.dev/projects/12775/badge"></a>


这些是通过级别条款。您还可以查看白银黄金级别条款。

Baseline Series: 基准等级1 基准等级2 基准等级3

        

 基本 13/13

  • 常规

    请注意,其他项目可能使用相同的名称。

    Go SDK for the Derive exchange — REST + WebSocket, EIP-712 signing, typed errors, full JSON-RPC coverage.

    请使用 SPDX许可证表达格式;例子包括“Apache-2.0”,“BSD-2-Clause”,“BSD-3-Clause”,“GPL-2.0+”,“LGPL-3.0 +”,“MIT”和“(BSD-2-Clause OR Ruby)”。
    如果有多种语言,请将它们列为逗号分隔值(可选空格),并将它们从最多到最少使用。如果有长列表,请至少列出前三个最常见的列表。如果没有语言(例如,这是仅文档或仅测试项目),请使用单个字符“ - ”。请使用每种语言的常规大小写,例如“JavaScript”。
    通用平台枚举(CPE)是用于信息技术系统,软件和软件包的结构化命名方案。在报告漏洞时,它可用于多个系统和数据库。

    go-derive is a Go SDK for the Derive (formerly Lyra) crypto-derivatives exchange.

    The project is currently solo-maintained and pre-1.0.
    First release: v0.1.0 (2026-05-05)
    Current version: v0.2.7

    Security features:

    • CycloneDX and SPDX SBOMs for every release
    • Cosign keyless OIDC signatures
    • SLSA Level 3 provenance

    CI and security tooling:

    • CodeQL
    • gosec
    • Semgrep
    • Trivy
    • Codacy
    • osv-scanner
    • govulncheck
    • gitleaks
    • TruffleHog
    • OpenSSF Scorecard

    Repository protections:

    • PR-only workflow
    • Linear history
    • Signed squash merges
    • 14 required status checks
    • GitHub Rulesets enforcement

    Release process:

    • Fully automated with release-please
    • Conventional Commits based
  • 基本项目网站内容


    项目网站必须简明扼要地描述软件的作用(它解决了什么问题?)。 [description_good]
    必须采用潜在用户可以理解的语言(例如,它使用最少的术语/行话)。

    go-derive is a Go SDK for the Derive exchange (formerly Lyra), a layer-2 derivatives venue supporting perps, options, and spot markets.

    Supported features:

    • REST public and private APIs
    • WebSocket public and private APIs
    • Subscription streams
    • EIP-712 order signing
    • Session key support

    The SDK provides programmatic access to Derive market data and trading APIs from Go, including built-in EIP-712 signing so users do not need to implement the signing flow themselves.



    项目网站必须提供有关如何获取和提供反馈(错误报告或增强功能)以及如何贡献的信息。 [interact]

    Install:

    • go get github.com/amiwrpremium/go-derive
    • README includes a working Quick Start example

    Feedback:

    • Structured GitHub issue templates for bug reports and feature requests
    • Contact links configured through .github/ISSUE_TEMPLATE/config.yml

    Contributing:

    • CONTRIBUTING.md documents:
      • Conventional Commits requirements
      • commit type → semantic version bump mapping
      • branch protection rules
      • automated release-please workflow

    The README Contributing section and "PRs Welcome" badge both link to CONTRIBUTING.md.



    关于如何贡献的信息必须解释贡献流程(例如,是否使用拉请求?) (需要网址) [contribution]
    除非另有说明,否则我们假定 GitHub上的项目使用问题列表(Issues)和拉(Pull)请求。这些信息可以简短,例如,说明项目使用拉请求,问题跟踪器或邮寄到邮件列表中的哪一个。

    Non-trivial contribution file in repository: https://github.com/amiwrpremium/go-derive/blob/master/CONTRIBUTING.md.



    关于如何贡献的信息应包括对可接受的贡献的要求(例如,引用任何所需的编码标准)。 (需要网址) [contribution_requirements]
  • FLOSS许可证


    项目生产的软件必须作为FLOSS发布。 [floss_license]
    FLOSS是以符合开源定义免费软件定义。此类许可证的示例包括 CC0 MIT BSD 2条款 BSD 3条款修订版 Apache 2.0 Lesser GNU通用公共许可证(LGPL),以及 GNU通用公共许可证(GPL)。为了我们的目的,这意味着许可证必须是:该软件也可以用其他许可证(例如,“GPLv2或专有”是可以接受的)。

    The MIT license is approved by the Open Source Initiative (OSI).



    建议由项目生成的软件的任何必需的许可证是由开放源码促进会(OSI)批准的许可证(英文)[floss_license_osi]
    OSI (开放源代码促进会)使用严格的审批流程来确定哪些许可证是开源软件(OSS)。

    The MIT license is approved by the Open Source Initiative (OSI).



    项目必须将其许可证在其源代码存储库中的标准位置发布。 (需要网址) [license_location]
    一种约定是将许可证发布为名为LICENSE或COPYING的顶级文件,其后可以带有扩展名,例如“ .txt”或“ .md”。另一种约定是使用一个名为LICENSES的目录,其中包含许可证文件。这些文件通常被命名为其SPDX许可证标识符,后跟适当的文件扩展名,如REUSE Specification中所述。请注意,此标准只是源存储库上的要求。从源代码生成某些内容(例如可执行文件,程序包或容器)时,无需包括许可证文件。例如,在为综合R存档网络(CRAN)生成R软件包时,请遵循标准CRAN惯例:如果许可证是标准许可证,请使用标准简短许可证规范(以避免安装另一文本副本)并列出排除文件(例如.Rbuildignore)中的LICENSE文件。同样,在创建Debian软件包时,您可以在版权文件中放置一个指向/ usr / share / common-licenses中的许可证文本的链接,并从创建的软件包中排除许可证文件(例如,通过在调用dh_auto_install之后删除文件) )。我们鼓励在可行的情况下以生成的格式包含机器可读的许可证信息。

    Non-trivial license location file in repository: https://github.com/amiwrpremium/go-derive/blob/master/LICENSE.


  • 文档


    项目必须为项目生成的软件提供基本文档。 [documentation_basics]
    该文档必须在某些媒体(例如文本或视频)中,包括:如何安装它,如何启动它,如何使用它(可能使用教程使用示例)以及如何安全地使用它(例如,做什么和不做什么),如果这是软件的一个适当的话题。安全文档不需要太长篇幅。项目可以使用非项目内容的超文本链接作为文档。如果项目不生产软件,请选择“不适用”(N/A)。

    Some documentation basics file contents found.



    项目必须提供描述项目生成的软件的外部接口(输入和输出)的参考文档。 [documentation_interface]
    外部接口的文档向最终用户或开发人员解释如何使用它。这将包括其应用程序接口(API),如果软件有。如果它是一个库,记录可以调用的主要类/类型和方法/函数。如果是Web应用程序,定义其URL接口(通常是其REST接口)。如果是命令行界面,请记录其支持的参数和选项。在许多情况下,最好是自动生成大部分文档,以便本文档随着软件的更改而保持同步,但这并不是必需的。项目可以使用非项目材料的超文本链接作为文档。文档可以自动生成(实际上这通常是最好的方法)。可以使用Swagger / OpenAPI生成REST接口的文档。代码界面文档可以使用 JSDoc (JavaScript), ESDoc (JavaScript),pydoc(Python)和Doxygen(很多)。仅在实现代码中添加注释不足以满足本条款;在没有阅读所有源代码的情况下,需要一个简单的方法来查看信息。如果项目不生产软件,请选择“不适用”(N/A)。

    Reference documentation is published on pkg.go.dev and linked from the README's Go Reference badge.

    Documentation characteristics:

    • generated from godoc comments
    • covers all public interfaces
    • every public package includes a multi-paragraph overview
    • every exported type, function, method, struct field, and constant is documented
    • more than 500 documentation comments across the root package and pkg/

    API documentation:

    • method inputs documented at the parameter level
    • outputs documented through return types
    • request and response structures linked through pkg/types

    Examples:

    • runnable examples under:
      • /examples/auth
      • /examples/derive
      • /examples/rest
      • /examples/ws
    • Example_* functions render directly on pkg.go.dev

  • 其他


    项目网站(网站,存储库和下载URL)必须使用TLS支持HTTPS。 [sites_https]
    您可以从Let's Encrypt获取免费证书。项目可以使用(例如) GitHub页面实现此条款, GitLab页面,或 SourceForge项目页面。如果您使用具有自定义域的GitHub页面,则可以使用内容传送网络(CDN)作为代理来支持HTTPS,例如博客文章“使用CloudFlare安全加速GitHub页面”,以满足此条款。如果您支持HTTP,我们敦促您将HTTP流量重定向到HTTPS。

    Given only https: URLs.



    该项目必须有一个或多个讨论机制(包括建议的更改和问题),可搜索,允许通过URL访问消息和主题,使新人能够参与一些讨论,并且不需要客户端安装专有软件。 [discussion]
    可接受机制的示例包括归档邮件列表,GitHub问题和拉请求讨论,Bugzilla,Mantis和Trac。如果满足这些标准,异步讨论机制(如IRC)是可以接受的;确保有一个URL可访问归档机制。允许专有JavaScript,但不鼓励。

    GitHub supports discussions on issues and pull requests.



    项目应该提供英文文档,并能够接受英文的代码的错误报告和评论。 [english]
    英语是计算机技术的通用语言;支持英语增加了全球不同潜在开发者和检视者的数量。即使核心开发人员的主要语言不是英文,项目也可以达到这个标准。

    All project-facing documentation is written in English, including:

    • README.md
    • CONTRIBUTING.md
    • SECURITY.md
    • CODE_OF_CONDUCT.md
    • documentation under docs/
    • GitHub issue templates
    • godoc and source-code comments

    Community interaction:

    • bug reports handled through GitHub Issues
    • technical discussions conducted in English
    • maintainer communication is in English


    必须维护该项目。 [maintained]
    至少,项目应尝试响应重大问题和漏洞报告。可能正在维护一个积极追求徽章的项目。所有项目和人员的资源都有限,典型项目必须拒绝某些提议的更改,因此有限的资源和提议拒绝本身并不表示未维护的项目。

    当项目知道将不再维护该项目时,应将此标准设置为“未满足”,并使用适当的机制向其他人指示该项目将不会得到维护。例如,使用“ DEPRECATED”作为其自述文件的第一个标题,在其主页开头附近添加“ DEPRECATED”,在其代码存储库项目说明的开头添加“ DEPRECATED”,在其中添加无需维护的标志其自述文件和/或主页,在任何软件包存储库中将其标记为已弃用(例如npm deprecate ),和/或使用代码存储库的标记系统对其进行归档(例如GitHub的“ archive”设置,GitLab的“ archived”标记, Gerrit的“只读”状态,或SourceForge的“已放弃”项目状态)。可以在这里找到更多讨论。

    Project maintenance is active and continuous.

    Current activity indicators (as of 2026-05-07):

    • 29 merged pull requests on master
    • 7 releases shipped within ~48 hours (v0.2.0v0.2.7)
    • CI runs on every push and pull request
    • daily OpenSSF Scorecard scans
    • automated dependency updates via Renovate
    • automated releases via release-please

    Operational tooling:

    • renovate.json manages dependency update automation
    • release-please manages versioning and release generation
    • README includes a live "Last commit" badge showing repository freshness

 变更控制 9/9

  • 公开的版本控制的源代码存储库


    该项目必须有一个版本控制的源代码存储库。它必须是公开可读的并可通过URL访问。 [repo_public]
    该URL可以与项目URL相同。该项目可能在特定情况下使用私人(非公开)分支,而更改不会公开发布(例如,在向公众披露漏洞之前修复漏洞)。

    Repository on GitHub, which provides public git repositories with URLs.



    项目的源代码存储库必须跟踪所做的更改,谁进行了更改,何时进行了更改。 [repo_track]

    Repository on GitHub, which uses git. git can track the changes, who made them, and when they were made.



    为了实现协作检视,项目的源代码存储库必须包括临时版本,以便检视版本之间的变化;它不得仅包括最终版本。 [repo_interim]
    项目可以选择从其公共源代码库中删除特定的临时版本(例如,修复特定的未公开安全漏洞,可能永远不会公开发布的内容,或者包括不能合法发布而且不是最终版本的内容)。

    The master branch contains the active development history, not only release tags.

    Development workflow:

    • all changes land through pull requests
    • pull requests are squash-merged
    • merge commits follow Conventional Commits formatting

    Repository activity:

    • 29 merged pull requests visible in GitHub history
    • releases are preceded by multiple development PRs and commits

    Example:

    • release v0.2.5 was preceded by PRs:
      • #23
      • #25
      • #26
    • each merged independently onto master

    Review traceability:

    • PR descriptions preserved
    • review discussions preserved
    • file diffs preserved
    • CI execution history preserved


    建议使用通用分布式版本控制软件(例如,git)作为项目的源代码存储库。 [repo_distributed]
    Git不是必须,项目在合适场景可以使用集中版本控制软件(如subversion)。

    Repository on GitHub, which uses git. git is distributed.


  • 唯一版本编号


    项目生成的用于每个用户使用的版本必须具有唯一版本标识符。 [version_unique]
    本条款可以通过各种方式来满足,包括提交ID(例如git提交ID或者Mercurial 更改列表id)或版本号(包括使用语义版本或基于日期的方案,如YYYYMMDD的版本号)。

    Each release uses a unique Semantic Version identifier.

    Versioning workflow:

    • release-please calculates versions from Conventional Commits
    • versions are synchronized across:
      • git tags (e.g. v0.2.7)
      • the Version constant in derive.go
      • .github/.release-please-manifest.json

    Release integrity:

    • repository ruleset release-tag-protection (id 15981700) prevents:
      • tag reuse
      • tag rewriting

    Release history is published through the GitHub Releases page.



    建议使用语义版本控制(SemVer)格式进行发布。 [version_semver]
    其他版本编号方案,如提交ID(例如git commit id或mercurial changeset id)或基于日期的方案,如YYYYMMDD,可以用作版本号,因为它们是唯一的。一些备选方案可能会导致问题,因为用户可能无法轻松确定是否是最新的。如果所有目标客户仅运行最新版本,则SemVer可能不太有助于识别软件版本(例如,它是通过持续交付不断更新的单个网站或互联网服务的代码)。


    建议项目识别其版本控制系统中的每个版本。例如,建议使用git的项目,使用git标签识别每个版本。 [version_tags]

    Each release is identified by a git tag using the format:

    • vX.Y.Z
    • example: v0.2.7

    Tag management:

    • tags are created automatically by release-please
    • tags are generated when the auto-generated release PR is merged

    Tag protection:

    • repository ruleset release-tag-protection (id 15981700) prevents:
      • tag reuse
      • tag deletion
      • tag rewriting

    The complete release tag history is available through the GitHub Tags page.


  • 发行说明


    该项目必须在每个版本中提供发布说明,这是该版本中主要变化的可读的摘要,以帮助用户确定是否应升级,升级影响将如何。发行说明不能是版本控制日志的原始输出(例如,“git log”命令结果不是发行说明)。其产出不适用于多个地点的项目(如单个网站或服务的软件),并采用持续交付,可以选择“N/A”。 (需要网址) [release_notes]
    发行说明可以以各种方式实施。许多项目将它们添加到名为“NEWS”,“CHANGELOG”或“ChangeLog”的文件中,可选的包含“.txt”,“.md”或“.html”等扩展名。历史上,术语“更改日志”是指每个更改的日志,但为了满足这些条款,需要的是可读取的摘要。发行说明可以由版本控制系统机制提供,例如 GitHub发布工作流程

    Non-trivial release notes file in repository: https://github.com/amiwrpremium/go-derive/blob/master/CHANGELOG.md.



    发行说明必须列出每个新版本中修复的每个公开的漏洞。如果没有发行说明或者没有公开的漏洞,选择“不适用”。 [release_notes_vulns]
    如果用户通常不能在自己的计算机上实际更新软件,而必须依靠中间人来执行升级(对于内核和与内核交织的底层软件通常是这种情况),项目可以选择“不适用”(N/A)。

    No publicly known runtime vulnerabilities have been disclosed for go-derive.

    Current security status across releases v0.1.0v0.2.7:

    • no assigned CVEs
    • no GitHub Security Advisories
    • no reported runtime vulnerabilities

    Security scanning performed in CI includes:

    • govulncheck
    • osv-scanner
    • Trivy
    • gosec
    • Semgrep
    • CodeQL

    Release notes:

    • CHANGELOG.md is generated automatically by release-please
    • changelog entries are derived from Conventional Commits
    • any future security fixes would appear under "Bug Fixes" and include the relevant CVE reference when applicable

 报告 8/8

  • 错误报告流程


    项目必须为用户提交错误报告(例如,使用问题跟踪器或邮件列表)提供相关流程。 (需要网址) [report_process]

    Non-trivial SECURITY[.md] file found file in repository: https://github.com/amiwrpremium/go-derive/blob/master/SECURITY.md. [osps_do_02_01]



    项目必须使用问题跟踪器来跟踪每个问题。 [report_tracker]

    GitHub Issues at https://github.com/amiwrpremium/go-derive/issues, with structured templates in .github/ISSUE_TEMPLATE/ (bug_report, feature_request, config).



    该项目必须响应过去2-12个月内(含)提交的大多数错误报告;响应不需要包括修复。 [report_responses]

    The project is 2 days old.
    First release: v0.1.0 on 2026-05-05.

    Issue tracker status:

    • 2 total issues
    • both are bot-generated

    Issues:

    • #5 Renovate config notice
      • closed by PR #1
    • #7 Renovate Dependency Dashboard
      • intentionally kept open

    No user-submitted bug reports have been filed so far.

    The maintainer is the sole responder and handles issue triage through GitHub notifications.



    该项目应该对过去2-12个月内(包括)的大部分(> 50%)的增强请求作出回应。 [enhancement_responses]
    答复可能是“不”或有关其价值的讨论。目的只是对某些请求有一些回应,这表明项目还活着。为了该条款的目的,项目不需要计数无效请求(例如,来自垃圾邮件发送者或自动系统)。如果项目不再进行增强,请选择“未满足”,并将介绍此情况的URL包含在内。如果一个项目有超出处理能力的增强需求数量,请选择“未满足”并解释。

    No user-submitted enhancement requests have been filed.

    Project status:

    • first release: v0.1.0 on 2026-05-05
    • only 2 issues exist
    • both are Renovate-generated meta-issues

    Issues:

    • #5 closed
    • #7 Renovate Dependency Dashboard kept open by design

    The "majority responded" requirement is satisfied vacuously.



    该项目必须有一个公开的报告和回复的档案供后续搜索。 (需要网址) [report_archive]

    All issues (open + closed, including full comment threads) are archived and searchable at:
    https://github.com/amiwrpremium/go-derive/issues?q=is%3Aissue

    GitHub provides:

    • full-text search across titles, bodies, and comments
    • filtering by:
      • author
      • label
      • state
      • date

  • 漏洞报告流程


    项目必须在项目网站上发布报告漏洞的流程。 (需要网址) [vulnerability_report_process]
    例如,https://PROJECTSITE/security 上的一个明确指定的邮箱地址,通常以 security@example.org 的形式。这可能与其错误报告流程相同。漏洞报告可能一直是公开的,但是许多项目都有一个私密漏洞报告机制。

    SECURITY.md:
    https://github.com/amiwrpremium/go-derive/blob/master/SECURITY.md

    Security reporting policy:

    The policy documents:

    • required report fields
    • optional report fields
    • response SLAs by severity

    Response targets:

    • Critical/High:
      • acknowledgment within 72 hours
      • triage within 7 days
    • Medium/Low:
      • acknowledgment within 5 business days
      • triage on a best-effort basis


    如果支持私有漏洞报告,项目必须包括如何以保密的方式发送信息。 (需要网址) [vulnerability_report_private]
    示例包括使用HTTPS(TLS)或使用OpenPGP加密的电子邮件在网络上提交的私密缺陷报告。如果漏洞报告总是公开的(从来没有私密漏洞报告),请选择“不适用”(N/A)。

    SECURITY.md §Reporting a vulnerability:
    https://github.com/amiwrpremium/go-derive/blob/master/SECURITY.md#reporting-a-vulnerability

    Private Vulnerability Reporting:
    https://github.com/amiwrpremium/go-derive/security/advisories/new

    Policy:

    • reporters must not open public issues
    • vulnerabilities must be submitted through GitHub Private Vulnerability Reporting

    Privacy guarantees:

    • reports are visible only to repository maintainers and the reporter
    • reports are not indexed in:
      • public issues
      • repository timeline
      • GitHub search


    该项目在过去6个月收到的任何漏洞报告的初始响应时间必须小于或等于14天。 [vulnerability_report_response]
    如果过去6个月没有报告漏洞,请选择“不适用”(N/A)。

    No vulnerability reports have been received.

    Project status:

    • first release: v0.1.0 on 2026-05-05
    • GitHub Security Advisories currently empty

    The 14-day initial-response requirement is satisfied vacuously.

    SECURITY.md response targets:

    • Critical/High:
      • acknowledgment within 72 hours
    • Medium/Low:
      • acknowledgment within 5 business days

    Both response targets are below the 14-day requirement.


 质量 13/13

  • 可工作的构建系统


    如果项目生成的软件需要构建使用,项目必须提供可以从源代码自动重新构建软件的可工作的构建系统。 [build]
    构建系统确定重建软件(以及以什么顺序)需要执行哪些操作,然后执行这些步骤。例如,它可以调用编译器来编译源代码。如果从源代码创建可执行文件,则必须可以修改项目的源代码,然后通过这些修改生成更新的可执行文件。如果项目生成的软件取决于外部库,则构建系统不必构建那些外部库。如果在修改源代码之后不需要构建任何使用该软件的软件,请选择“不适用”(N/A)。

    建议使用通用工具来构建软件。 [build_common_tools]
    例如,Maven,Ant,cmake,自动工具,make,rake(Ruby)或devtools (R)。

    该项目应该仅使用FLOSS工具来构建。 [build_floss_tools]

    Build command:
    go build ./...

    Required tooling:

    • Go toolchain
    • BSD-3-Clause
    • FLOSS

    Dependency licensing:

    No proprietary build tools, IDEs, compilers, SDKs, or licensing servers are required.

    CI linters are also FLOSS:

    • gofmt
    • goimports
    • go vet
    • golangci-lint
    • govulncheck
    • staticcheck

  • 自动测试套件


    该项目必须使用至少一个作为FLOSS公开发布的自动测试套件(该测试套件可以作为单独的FLOSS项目维护)。 [test]
    该项目可以使用多个自动测试套件(例如,一个是快速运行的测试套件,而另一个更为彻底但需要特殊设备)。

    Testing framework:

    • Go standard testing package
    • BSD-3-Clause
    • included with the Go toolchain

    Test command:
    go test -race -count=1 ./...

    Documented in:

    CI execution:

    • runs on every push and pull request
    • test matrix:
      • ubuntu-latest
      • macos-latest
      • windows-latest
    • Go versions:
      • 1.25
      • 1.26

    Integration tests:

    • located under test/
    • protected behind an integration build tag
    • dispatched manually through:
      .github/workflows/integration.yml


    测试套件应该以该语言的标准方式进行调用。 [test_invocation]
    例如“make check”,“mvn test”或“rake test”。

    Tests are executed with:

    • go test ./...
    • go test -race -count=1 ./...

    The project uses:

    • standard _test.go test files
    • Go's built-in testing package

    No custom test runner or test harness is required.



    建议测试套件覆盖大部分(或理想情况下所有)代码分支,输入字段和功能。 [test_most]

    Coverage:

    • 90.2% statement coverage
    • measured with:
      go test -race -coverprofile -coverpkg=...

    Test suite size:

    • 110 _test.go files
    • 7,369 LOC of tests
    • 8,378 LOC of source

    Coverage reporting:

    Coverage regressions are flagged on pull requests.



    建议项目实施持续集成,将新的或更改的代码经常集成到中央代码库中,并对结果进行自动化测试。 [test_continuous_integration]

    Continuous integration uses GitHub Actions.

    CI workflow:

    • .github/workflows/ci.yml
    • runs on every push and pull request

    CI tasks:

    • gofmt
    • go vet
    • go test -race -coverprofile
    • govulncheck
    • go build

    Test matrix:

    • ubuntu
    • macos
    • windows
    • Go 1.25
    • Go 1.26

    Branch protection:

    • merging to master requires 14 status checks
    • enforced by:
      master-branch-protection ruleset (15981309)

    Workflow coverage:

    • tests
    • linting
    • security scanning
    • supply-chain verification
    • release verification

    Security tooling:

    • CodeQL
    • gosec
    • Semgrep
    • Trivy
    • Codacy
    • osv-scanner
    • gitleaks
    • TruffleHog

    Additional checks:

    • pin-check
    • license-check
    • govulncheck

  • 新功能测试


    该项目必须有通用的策略(正式或非正式),当主要的新功能被添加到项目生成的软件中,该功能的测试应该同时添加到自动测试套件。 [test_policy]
    只要有相应的策略,即使是通过口头传播,也就是说开发人员应该为主要的新功能在自动化测试套件中添加测试,选择“Met”。

    CONTRIBUTING.md §Coverage:
    https://github.com/amiwrpremium/go-derive/blob/master/CONTRIBUTING.md#coverage

    Policy:
    "Patches that meaningfully drop coverage will get flagged on the PR."

    Enforcement:

    • Codecov posts diff-coverage comments
    • Codacy runs:
      • Codacy Coverage Variation
      • Codacy Diff Coverage

    Checks run on every pull request and mechanically surface new functionality lacking tests.



    该项目必须有证据表明,在项目生成的软件的最近重大变化中,已经遵守了添加测试的条款: test_policy [tests_are_added]
    主要功能通常在发行说明中提及。不需要完美,只需证明,当新的主要功能添加到项目生成的软件时,测试通常会在实践中被添加到自动化测试套件中。

    Evidence:

    • 90.2% coverage existed at v0.1.0 and remained stable across 7 releases
    • tests were committed alongside source from the beginning

    Examples:

    • PR #10 removed Trade.Realized and its dedicated test in the same commit
    • PR #17 refactored internal/retry/backoff.go to use crypto/rand
      • existing backoff_test.go validated the new implementation without modification

    PR enforcement:

    • every PR includes:
      • Codecov delta checks
      • Codacy Diff Coverage checks
    • untested new code is flagged automatically


    建议您在更改提案的说明文档中添加测试策略要求(请参阅test_policy)。 [tests_documented_added]
    但是,只要在实践中添加了测试,即使是非正式规则也是可以接受的。

    Test expectations are documented in CONTRIBUTING.md through the coverage policy and CI enforcement rules, but there is no explicit standalone "tests must accompany changes" instruction in the change-proposal workflow.

    Adding an explicit requirement for contributors to include or update tests alongside behavioral changes is therefore suggested.


  • 警告标志


    该项目必须启用一个或多个编译器警告标志,“安全”语言模式,或者使用单独的“linter”工具查找代码质量错误或常见的简单错误,如果至少有一个FLOSS工具可以在所选择的语言实现此条款。 [warnings]
    编译器警告标志的例子包括gcc/clang “-Wall”。 “安全”语言模式的示例包括JavaScript “use strict”和perl5的“使用警告”。一个单独的“linter”工具用于检查源代码以查找代码质量错误或常见的简单错误。这些通常在源代码或构建指令中启用。

    The repository uses multiple FLOSS Go linters and analysis tools:

    • golangci-lint
    • staticcheck
    • gosec
    • go vet
    • gofmt
    • goimports

    Workflows:

    • .github/workflows/lint.yml
    • .github/workflows/gosec.yml
    • .github/workflows/ci.yml

    Git hooks:

    • Lefthook runs:
      • gofmt
      • goimports
      • go vet
      • golangci-lint run --new-from-rev=HEAD
    • documented in CONTRIBUTING.md §Git hooks

    Policy:

    • lint warnings fail CI
    • required status checks block merges on lint failures


    该项目必须处理警告。 [warnings_fixed]
    告警是通过执行warnings条款确定的。该项目应该修复告警或在源代码中将其标记为误报。理想情况下,不会有告警,但项目可能会接受一些告警(通常每100行小于1个告警,或整体少于10个告警)。

    Linter warnings are treated as build failures.

    Enforced tooling:

    • golangci-lint
    • staticcheck
    • gosec
    • go vet
    • gofmt

    Policy:

    • any finding exits non-zero
    • all are required status checks on the master ruleset
    • PRs cannot merge with open lint warnings

    Example:

    • PR #17 triggered gosec G404 on math/rand/v2
    • the code was rewritten to use crypto/rand
    • the warning was fixed, not suppressed

    Code-scanning alerts from:

    • gosec
    • Semgrep
    • CodeQL
    • Trivy

    are actively triaged and documented in:
    docs/known-tool-issues.md



    建议在实际情况下,项目以最严格方式对待项目生成的软件中的告警。 [warnings_strict]
    某些项目无法有效启用某些警告。需要证明的是,项目正在努力的启用警告标志,以便早期发现错误。

    All linters run in strict/default mode with no rule exclusions.

    Configuration:

    • golangci-lint uses upstream defaults
    • staticcheck uses upstream defaults
    • gosec scans the full repository and uploads SARIF
    • gofmt and goimports fail on unformatted files
    • go vet runs without exclusions

    Suppression policy:

    • zero in-source:
      • nolint
      • nosec
      • noqa
        suppressions

    Project policy:

    • issues are fixed at source instead of suppressed
    • unavoidable tool false positives remain visible and are documented in:
      docs/known-tool-issues.md

    Documented examples:

    • Codacy deadcode-on-generics parser bug
    • remark-lint resolver false positives

 安全 16/16

  • 安全开发知识


    该项目必须至少有一个主要开发人员知道如何设计安全软件。 [know_secure_design]
    这需要了解以下设计原则,包括 Saltzer和Schroeder 中的8项原则:
    • 机制经济(保持设计简单实用,例如采用彻底简化)
    • 故障安全默认(默认情况下,访问决策应拒绝),项目安装应默认安全)
    • 完全仲裁(必须检查每个可能被限制的访问权限,并且不可绕过)
    • 开放式设计(安全机制不应该依赖于攻击者对其设计的无知,而应该更容易地保护和更改信息,例如密钥和密码)
    • 特权分离(理想情况下,对重要对象的访问应该取决于多个条件,从而破坏一个保护系统将无法实现完全访问。如,多因子身份验证,要求密码和硬件令牌,比单因子认证安全性更高)
    • 最小权限(进程应该以最少的权限运行)
    • 最少的公共机制(设计应该最大限度地减少所有用户所依赖的,涉及到多个用户的共同机制,如,临时文件的目录)
    • 心理可接受性(人机接口必须设计为易于使用 —— 设计为“最不惊讶”)
    • 有限的攻击面(攻击面 —— 一组不同的入口,其​​中攻击者可以尝试输入或提取数据 —— 应该受到限制)
    • 输入验证与白名单(输入通常应该在被接受之前检查以确定是否有效;此验证应使用白名单(仅接受已知的有效值),而不是黑名单(尝试列出已知的非法值))。
    项目中的“主要开发人员”的定义是熟悉项目代码的任何人,很乐意对其进行更改,并被项目中大多数其他参与者确认。主要开发人员通常会在过去一年中通过代码,文档或回答问题提供一些贡献。开发人员通常被认为是主要开发人员,如果他们启动项目(并且还没有离开项目满三年),可以选择在私人漏洞报告渠道(如果有的话)上接收信息,可以代表项目接受提交,或执行项目软件的最终版本发布。如果只有一个开发者,那个人是主要开发人员。

    Self-attested security evidence in the repository includes:

    • correct EIP-712 typed-data signing in pkg/auth
    • separate EIP-191 and EIP-712 signing flows
    • session-key delegation to avoid keeping owner keys in process memory

    Security improvements:

    • cryptographic randomness via crypto/rand
      • PR #17
    • explicit validation on every workflow_dispatch input
      • PR #18

    Supply-chain hardening:

    • CycloneDX + SPDX SBOMs
    • cosign keyless signatures
    • SLSA Level 3 provenance
    • SHA-pinned GitHub Actions enforced by:
      .github/workflows/pin-check.yml

    CI hardening:

    • step-security/harden-runner on every CI job

    Security process:

    • private vulnerability reporting documented in SECURITY.md
    • severity-based response SLAs

    Defence-in-depth:

    • 9 SAST/secret/dependency scanners
    • daily OpenSSF Scorecard scans


    该项目的主要开发人员中,至少有一个必须知道导致这类型软件漏洞的常见错误类型,以及至少有一种方法来对付或缓解这些漏洞。 [know_common_errors]
    示例(取决于软件的类型)包括SQL注入,操作系统注入,经典缓冲区溢出,跨站点脚本(XSS),缺少认证和缺少授权。请参阅 CWE/SANS 25种最常见漏洞 OWASP十大漏洞类型项目

    Self-attested security mitigations in the repository include:

    • weak randomness mitigation:

      • crypto/rand
    • integer narrowing protection:

      • explicit & 0xFFFF mask in pkg/auth/nonce.go
    • auth-bypass prevention:

      • separate EIP-191 and EIP-712 signing flows
      • session-key delegation keeps owner keys off-host
    • input injection protection:

      • regex validation for workflow_dispatch.inputs
      • implemented in PR #18
    • race-condition detection:

      • go test -race on every CI build
    • secret-leak detection:

      • gitleaks
      • TruffleHog
      • GitGuardian
    • dependency vulnerability scanning:

      • govulncheck
      • osv-scanner
      • Trivy
      • Renovate
    • supply-chain hardening:

      • SHA-pinned GitHub Actions
      • cosign-signed SBOMs
      • SLSA Level 3 provenance
    • static analysis and bug detection:

      • CodeQL
      • gosec
      • Semgrep
      • Codacy
      • golangci-lint
      • staticcheck

  • 使用基础的良好加密实践

    请注意,某些软件不需要使用加密机制。

    项目生成的软件默认情况下,只能使用由专家公开发布和审查的加密协议和算法(如果使用加密协议和算法)。 [crypto_published]
    这些加密条款并不总是适用,因为某些软件不需要直接使用加密功能。

    All cryptographic operations use publicly-published, expert-reviewed primitives.

    Cryptographic standards and primitives:

    Underlying cryptography:

    • ECDSA on secp256k1
    • keccak-256 hashing
    • OS randomness via Go crypto/rand
    • TLS via Go crypto/tls
      • TLS 1.2 / 1.3
      • RFC 5246 / RFC 8446

    No custom cryptographic primitives are implemented.



    如果项目生成的软件是应用程序或库,其主要目的不是实现加密,那么它应该只调用专门设计实现加密功能的软件,而不应该重新实现自己的。 [crypto_call]

    go-derive's primary purpose is exchange access, not cryptography.

    Cryptographic operations are delegated to established upstream libraries:

    • github.com/ethereum/go-ethereum/crypto

      • secp256k1 ECDSA
      • keccak-256 hashing
    • signer/core/apitypes

      • EIP-712 typed-data hashing
    • common

      • EIP-55 address checksums
    • accounts/abi

      • ABI encoding
    • Go crypto/rand

      • randomness
    • Go crypto/tls

      • transport security

    No cryptographic primitives are re-implemented in the repository.
    pkg/auth only assembles inputs and calls upstream libraries.



    项目所产生的软件中,所有依赖于密码学的功能必须使用FLOSS实现。 [crypto_floss]

    All cryptographic dependencies are FLOSS.

    Dependencies:

    • Go stdlib crypto/*

      • BSD-3-Clause
    • github.com/ethereum/go-ethereum/{crypto,common,accounts/abi,signer/core/apitypes}

      • LGPL-3.0
    • gorilla/websocket

      • BSD-2-Clause

    License verification:

    • .github/workflows/license-check.yml
    • runs:
      go-licenses check ./...

    Allowed licenses:

    • MIT
    • BSD
    • Apache
    • MPL
    • LGPL

    No proprietary cryptographic modules are required.



    项目生成的软件中的安全机制使用的默认密钥长度必须至少达到2030年(如2012年所述)的NIST最低要求。必须提供配置,以使较小的密钥长度被完全禁用。 [crypto_keylength]
    这些最小位长度是:对称密钥112,因式分解模数2048,离散对数密钥224,离散对数组2048,椭圆曲线224和散列224(密码散列不涉及该位长度),关于密码散列的更多信息可以在 crypto_password_storage 条款)。请参阅 http://www.keylength.com 以比较不同组织的密钥长度建议。在某些配置中,软件可能允许较小的密钥长度(理想情况下不会,因为这允许降级攻击,但是互操作性有时需要较短的密钥长度)。

    Default cryptographic settings meet or exceed NIST SP 800-57 2030+ minimum recommendations.

    Defaults:

    • secp256k1 ECDSA signing

      • ~128-bit security level
      • required by EIP-191 / EIP-712
    • keccak-256 hashing

      • 256-bit output
      • SHA-3 family
    • Go stdlib TLS defaults

      • TLS 1.2 / 1.3
      • AES-128-GCM minimum

    Restrictions:

    • secp256k1 is the only supported signing curve
    • no configuration exists to weaken:
      • curve selection
      • key size
      • hashing algorithms

    Smaller key lengths are not configurable.



    项目产生的软件中的默认安全机制不得取决于已被破解的密码算法(例如,MD4,MD5,单DES,RC4,Dual_EC_DRBG)或使用不适合上下文的密码模式(例如,ECB模式几乎不适当,因为它揭示了密文中相同的块,如 ECB企鹅所示。CTR模式通常是不合适的,因为如果重复输入状态,则它不执行认证并导致重复)。 [crypto_working]
    在许多情况下,最好选择设计用于组合保密和认证的块密码算法模式,例如Galois / Counter Mode(GCM)和EAX。项目可以允许用户为必要的兼容性启用已被破解的加密机制,但是需要用户知道他们正在这么做。

    No broken cryptographic algorithms are used in any default code path.

    Cryptographic inventory:

    • secp256k1 ECDSA
      • signing
    • keccak-256
      • hashing
    • Go crypto/rand
      • randomness
    • TLS 1.2 / 1.3
      • transport security

    The following algorithms do not appear in the source tree:

    • MD4
    • MD5
    • SHA-1
    • RC2
    • RC4
    • DES / 3DES
    • Dual_EC_DRBG

    Verification:
    grep -rE "(md4|md5|^sha1|rc4|rc2|des\.|3des|dual_ec)" --include='*.go'

    Result:

    • empty

    No interoperability fallback to legacy cryptography is required.
    Derive uses modern EIP-191 and EIP-712 signing exclusively.



    由项目产生的软件中的默认安全机制不应该依赖于具有已知严重弱点的加密算法或模式(例如,SHA-1密码散列算法或SSH中的CBC模式)。 [crypto_weaknesses]
    CERT:SSH CBC漏洞中讨论了SSH中CBC模式的问题。

    No algorithms with known serious weaknesses are used in default code paths.

    Cryptography:

    • signing uses keccak-256
    • SHA-1 is not used

    TLS:

    • handled by Go crypto/tls
    • defaults to AEAD ciphers:
      • AES-GCM
      • ChaCha20-Poly1305
    • TLS 1.2 and TLS 1.3 only
    • CBC suites disabled
    • static RSA key exchange disabled

    Absent from the source tree:

    • RC4
    • RC2
    • DES
    • 3DES
    • MD-family hashes

    Verified via grep across *.go files.



    项目产生的软件中的安全机制应该​​对密钥协商协议实施完美的前向保密(PFS),如果长期密钥集合中的一个长期密钥在将来泄露,也不能破坏从一组长期密钥导出的会话密钥。 [crypto_pfs]

    Perfect forward secrecy is provided by the TLS layer.

    Transport security:

    • implemented through Go crypto/tls
    • ECDHE-based key exchange by default:
      • X25519
      • P-256
      • P-384

    TLS behavior:

    • TLS 1.2 uses ephemeral ECDHE key exchange
    • TLS 1.3 requires ephemeral key exchange
    • static RSA key exchange disabled
    • static DH key exchange disabled

    Security property:

    • compromise of long-term certificate keys cannot decrypt previously captured traffic

    The SDK does not implement its own application-level key agreement.



    如果项目产生的软件存储用于外部用户认证的密码,则必须使用密钥拉伸(迭代)算法(例如,PBKDF2,Bcrypt或Scrypt)将密码存储为每用户盐值不同的迭代散列 。 [crypto_password_storage]
    此条款仅适用于软件强制使用密码验证用户身份的情况(如服务器端Web应用程序)。在软件存储用于认证到其他系统的密码(例如,该软件实现某个其他系统的客户端)的情况下,这是不适用的,因为该软件的至少某个部分必须经常访问未散列加密的密码。

    N/A — go-derive does not implement password-based authentication.

    Authentication model:

    • secp256k1 signatures
    • EIP-191
    • EIP-712

    The codebase contains:

    • no login flow
    • no credential database
    • no password hashing
    • no password storage

    Private keys:

    • provided by the calling application
    • held only in memory for signing
    • never serialized or persisted by the SDK


    由项目生成的软件中的安全机制必须使用密码学安全的随机数生成器生成所有加密密钥和随机数,并且不得使用密码学不安全的生成器。 [crypto_random]
    密码安全的随机数生成器可以是硬件随机数生成器,或者它可以是使用诸如Hash_DRBG,HMAC_DRBG,CTR_DRBG,Yarrow或Fortuna之类的算法的加密安全的伪随机数生成器(CSPRNG)。对安全性随机数生成器的调用示例包括Java的java.security.SecureRandom和JavaScript的window.crypto.getRandomValues。调用不安全随机数生成器的示例包括Java的java.util.Random和JavaScript的Math.random。

    All randomness uses Go crypto/rand, backed by the OS CSPRNG:

    • Linux: getrandom
    • macOS: arc4random_buf
    • Windows: BCryptGenRandom

    Security hardening:

    • PR #17 replaced:
      • math/rand
      • math/rand/v2
    • rewritten to use:
      • crypto/rand

    ECDSA signing:

    • signing nonces (k values) come from crypto/rand
    • provided through go-ethereum crypto.Sign

    Verification:
    grep -rE "math/rand" --include='*.go'

    Result:

    • zero matches

    No insecure RNG is reachable from any code path producing keys, nonces, or signatures.


  • 安全交付防御中间人(MITM)的攻击


    该项目必须使用一种针对MITM攻击的传递机制。使用https或ssh + scp是可以接受的。 [delivery_mitm]
    一个更强大的机制是使用数字签名的软件包发布软件,因为这样可以减轻对分发系统的攻击,但只有在用户确信签名的公钥是否正确的情况下才可以确定。用户实际上会检查签名。

    Distribution channels use HTTPS exclusively. [osps_br_03_02]



    不得通过http协议获取加密散列(例如,sha1sum)并直接使用,而不检查密码学签名。 [delivery_unsigned]
    这些散列可以在传输过程中修改。

    No cryptographic hash is retrieved over plain HTTP and trusted without signature verification.

    Release verification:

    • .github/workflows/verify-release.yml
    • downloads occur over HTTPS
    • verification uses:
      • cosign verify-blob
      • slsa-verifier verify-artifact

    Verification checks:

    • Sigstore certificate identity validation
    • SLSA Level 3 provenance validation

    Security hardening:

    • PR #26 removed the last curl | bash pattern from CI
    • replaced with SHA-pinned:
      • codacy/codacy-coverage-reporter-action

    Dependency integrity:

    • go install uses HTTPS module transport
    • go.sum integrity verification enabled

    GitHub Actions:

    • all third-party Actions are SHA-pinned
    • enforced by:
      .github/workflows/pin-check.yml

  • 修正公开的漏洞


    被公开了超过60天的中等或更高严重程度的漏洞,必须被修复。 [vulnerabilities_fixed_60_days]
    该漏洞必须由项目本身修补和发布(修补程序可能在其他地方开发)。一旦漏洞具有公开发布的非付费信息的CVE(例如,在国家漏洞数据库)或项目已被通知,且信息已经发布给公众(可能是项目自己发布),则视为漏洞已经公众所知。如果其 CVSS 2.0 基本分数为4或更高,则漏洞是中等到高的严重性。 注意:这意味着全世界的所有攻击者可能会对用户造成长达60天的伤害。这个标准通常比Google在重新启动负责任的披露中所推荐的容易得多。因为Google建议,如果报告不是公开的,那么当项目得到通知,甚至报告尚未公开时,60天的时间段就会开始。

    No unpatched medium-or-higher vulnerabilities are currently known.

    Current status:

    • zero GitHub Security Advisories
    • zero Dependabot alerts

    CI security scanning:

    • govulncheck
    • osv-scanner
    • Trivy filesystem scanning
      • severity threshold: MEDIUM+
    • CodeQL
    • gosec
    • Semgrep
    • Codacy SAST

    All security checks are currently green on master HEAD.

    Relevant workflows:

    • .github/workflows/ci.yml
    • .github/workflows/osv-scanner.yml
    • .github/workflows/trivy.yml
    • .github/workflows/codeql.yml
    • .github/workflows/gosec.yml
    • .github/workflows/semgrep.yml
    • .github/workflows/codacy.yml


    项目在得到报告后应该迅速修复所有致命漏洞。 [vulnerabilities_critical_fixed]

    No critical vulnerabilities have been reported against go-derive.

    Current status:

    • GitHub Security Advisories empty
    • project age: 2 days

    The "rapid fix" requirement is currently satisfied vacuously.

    Security response policy:
    https://github.com/amiwrpremium/go-derive/blob/master/SECURITY.md

    Response targets:

    • Critical/High:

      • acknowledgment within 72 hours
      • triage update within 7 days
      • coordinated disclosure with the reporter
    • Medium/Low:

      • acknowledgment within 5 business days
      • best-effort triage thereafter

  • 其他安全问题


    公共存储库不得泄漏旨在限制公众访问的有效私人凭证(例如,工作密码或私钥)。 [no_leaked_credentials]
    项目可以泄漏测试和不重要数据库的“样本”凭据,只要它们不旨在限制公共访问。

    No valid private credentials exist in the repository.

    Continuous secret scanning:

    • gitleaks
    • TruffleHog
    • GitGuardian Security Checks
    • Codacy security scan

    Scanning scope:

    • every push
    • full git history

    Relevant workflows:

    • .github/workflows/gitleaks.yml
    • .github/workflows/trufflehog.yml

    Test vectors:

    • pkg/auth/*_test.go
    • use publicly-known Ethereum test keys
    • not usable credentials

    Repository contents:

    • no .env files
    • no credentials.json files

 分析 8/8

  • 静态代码分析


    如果至少有一个FLOSS工具以所选择的语言实现此条款,则至少需要将一个静态代码分析工具应用于软件发布之前任何提议的主要生成版本。 [static_analysis]
    静态代码分析工具检查软件代码(源代码,中间代码或可执行文件),而不用特定输入执行。本条款中,编译器警告和“安全”语言模式不被视为静态代码分析工具(它们通常避免深入分析,因为速度至关重要)。此类静态代码分析工具的示例包括 cppcheck clang静态分析器 FindBugs (包括FindSecurityBugs), PMD Brakeman Coverity质量分析器 HP Fortify静态代码分析器。更多的工具列表可以在诸如维基百科静态代码分析工具列表关于静态代码分析的OWASP信息 NIST源代码安全分析器列表 Wheeler的静态分析工具列表 SWAMP 是使用各种工具评估软件漏洞的免费平台。如果没有可用于所使用的实现语言的FLOSS静态分析工具,请选择“N/A”。

    The repository runs nine FLOSS static-analysis tools on every pull request and push to master:

    • CodeQL
    • gosec
    • Semgrep
    • staticcheck
    • golangci-lint
    • Trivy
    • osv-scanner
    • govulncheck
    • Codacy analyzers

    Codacy analyzers include:

    • Revive
    • Markdownlint
    • Remark-lint
    • Checkov

    Release process:

    • releases are created through release-please PRs
    • release PRs pass through the same CI and analysis gates
    • every release is preceded by a complete static-analysis run

    Workflow definitions:
    https://github.com/amiwrpremium/go-derive/tree/master/.github/workflows



    建议至少有一个用于static_analysis标准的静态分析工具包括在分析语言或环境中查找常见漏洞的规则或方法。 [static_analysis_common_vulnerabilities]
    专门设计用于寻找常见漏洞的静态分析工具更有可能找到它们。也就是说,使用任何静态工具通常会帮助找到一些问题,所以我们“通过”级别的徽章建议,但不要求这个条款。

    Three static-analysis tools specifically target common Go vulnerability classes.

    gosec:

    • runs the full Go security ruleset
    • includes checks such as:
      • G101 hardcoded credentials
      • G201–G204 injection risks
      • G302–G306 file permissions
      • G401–G404 weak cryptography
      • G115 integer overflow
    • workflow:
      .github/workflows/gosec.yml

    Semgrep:

    • runs security-focused rule packs:
      • p/security-audit
      • p/golang
      • p/secrets
    • workflow:
      .github/workflows/semgrep.yml

    CodeQL:

    • uses the security-and-quality query pack
    • workflow:
      .github/workflows/codeql.yml

    All analysis runs execute on every push and pull request.



    使用静态代码分析发现的所有中,高严重性可利用漏洞必须在确认后及时修复。 [static_analysis_fixed]
    如果其 CVSS 2.0 评分为4或更高,则此漏洞是中等到高的严重性。

    All medium-or-higher severity findings from the static-analysis stack have been fixed at source.

    Examples:

    • gosec G115 integer narrowing

      • fixed in PR #17
      • explicit & 0xFFFF mask added
    • Semgrep / Opengrep math-random-used

      • fixed in PR #17
      • switched from non-CSPRNG randomness to crypto/rand

    Response time:

    • both fixes shipped within ~30 minutes of alert discovery

    Remaining open alerts:

    • low/info-severity false positives only

    Documented examples:

    • Codacy deadcode parser limitations with Go generics
    • remark-lint reference-resolution issues in Contributor Covenant templates

    Tracking document:
    https://github.com/amiwrpremium/go-derive/blob/master/docs/known-tool-issues.md



    建议每次提交或至少每天执行静态源代码分析。 [static_analysis_often]

    All static analysis runs on every push and pull request:

    • gosec
    • Semgrep
    • CodeQL
    • Trivy
    • Codacy
    • osv-scanner
    • govulncheck
    • staticcheck
    • golangci-lint

    Analysis frequency:

    • every commit triggers fresh analysis

    Scheduled backstop scans:

    • daily:
      • Trivy
      • OpenSSF Scorecard
    • weekly:
      • CodeQL
      • Semgrep
      • osv-scanner
      • Codacy

    Purpose:

    • catches findings introduced by updated vulnerability datasets or rulesets

    Workflow definitions:
    https://github.com/amiwrpremium/go-derive/tree/master/.github/workflows


  • 动态代码分析


    建议在发布之前,至少将一个动态分析工具应用于软件任何发布的主要生产版本。 [dynamic_analysis]
    动态分析工具通过执行特定输入来检查软件。例如,项目可以使用模糊工具(例如, American Fuzzy Lop )或Web应用扫描程序(例如, ZAP w3af )。在某些情况下, OSS-Fuzz 项目可以对您的项目应用模糊测试。为满足此条款,动态分析工具需要以某种方式改变输入,以寻找各种问题,或者将其作为一个具有至少80%分支覆盖率的自动测试套件。 动态分析维基百科页面 OWASP的fuzzing页面 识别一些动态分析工具。分析工具可能专注于寻找安全漏洞,但这不是必需的。

    Two FLOSS dynamic-analysis mechanisms run on every push and pull request, and therefore before every release.

    1. Go race detector
    • executed via:
      go test -race -coverprofile -covermode=atomic
    • configured in:
      .github/workflows/ci.yml
    • instruments runtime memory access to detect data races
    1. Native Go fuzzing
    • 10 fuzz functions across:
      • pkg/auth
      • pkg/types
      • pkg/errors
      • internal/jsonrpc

    Fuzz targets include:

    • signer handling
    • address parsing
    • txhash parsing
    • decimal parsing
    • orderbook parsing
    • millistime parsing
    • API error JSON decoding
    • JSON-RPC decode and notification detection

    Fuzz seed corpora:

    • committed into the repository
    • executed as ordinary tests during CI


    建议如果项目生成的软件包含使用内存不安全语言编写的软件(例如C或C++),则至少有一个动态工具(例如,fuzzer或web应用扫描程序)与检测缓冲区覆盖等内存安全问题的机制例行应用。如果该项目生成的软件没有以内存不安全语言编写,请选择“不适用”(N / A)。 [dynamic_analysis_unsafe]
    检测内存安全问题的机制的示例包括AddressSanitizer(ASAN)(可在GCC和LLVM中使用),“Memory Sanitizer” valgrind 。其他可能使用的工具包括ThreadSanitizerUndefinedBehaviorSanitizer。广泛的断言也将起作用。

    N/A — the project is written entirely in Go, a memory-safe language.

    Memory-safety properties:

    • no C code
    • no C++
    • no cgo usage
    • no unsafe package usage

    Verification:

    • grep -rn '"unsafe"' --include='*.go'
    • grep -rn 'import "C"' --include='*.go'

    Results:

    • both return empty

    Dependencies:

    • all modules in go.sum are pure Go


    建议由项目生成的软件包括许多运行时断言,在动态分析期间检查。 [dynamic_analysis_enable_assertions]
    这个标准并不建议使生产过程中的断言;这完全取决于项目及其用户的决定。该标准的重点是部署之前的动态分析过程中改善故障检测。在生产使用中启用断言与在动态分析(例如测试)期间启用断言完全不同。在某些情况下,在生产中使用断言是极其不明智的(尤其是在高完整性组件中)。存在许多反对在生产环境中启用断言的论点,例如,库不应使调用程序崩溃,它们的存在可能会导致应用商店拒绝,和/或在生产环境中激活断言可能会暴露诸如私钥之类的私有数据。请注意,在许多Linux发行版中都未定义NDEBUG ,因此C / C ++缺省情况下,assert()将在这些环境中启用生产。对于那些环境中的生产,使用不同的断言机制或定义NDEBUG可能很重要。

    N/A — the project is written entirely in Go, a memory-safe language.

    Memory-safety properties:

    • no C code
    • no C++
    • no cgo usage
    • no unsafe package usage

    Verification:

    • grep -rn '"unsafe"' --include='*.go'
    • grep -rn 'import "C"' --include='*.go'

    Results:

    • both return empty

    Dependencies:

    • all modules in go.sum are pure Go


    通过动态代码分析发现的所有严重性为中,高的可利用漏洞必须在确认后及时修复。 [dynamic_analysis_fixed]
    如果 CVSS 2.0 基本分数为4,那么一个漏洞是中等到高的严重性。如果您没有运行动态代码分析,没有发现任何这样的漏洞,选择“不适用”(N/A)。

    No medium-or-higher severity dynamic-analysis findings have been raised.

    Current status:

    • Go race detector passes on every CI build
    • fuzz-test seed corpora execute on every push
    • no crashes or panics detected since:
      • v0.1.0
      • 2026-05-05

    CI matrix:

    • ubuntu
    • macos
    • windows
    • Go 1.25
    • Go 1.26

    There are currently no pending dynamic-analysis fixes.



该数据可在社区数据许可协议 – 许可性,版本 2.0 (CDLA-Permissive-2.0)下获取。这意味着数据接收方可以共享数据,无论是否经过修改,只要数据接收方在共享数据时提供本协议文本。请注明AMiWR和OpenSSF最佳实践徽章贡献者。

项目徽章条目拥有者: AMiWR.
最后更新于 2026-05-07 11:45:28 UTC, 最后更新于 2026-05-07 12:40:37 UTC。 最后在 2026-05-07 12:40:37 UTC 获得通过徽章。