hMailServer

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

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

如果这是您的项目,请在项目页面上显示您的基准徽章状态!基准徽章状态如下所示: 项目14187的基准徽章等级为in_progress 以下是如何嵌入基准徽章:
您可以通过将其嵌入到Markdown文件中来显示您的基准徽章状态:
[![OpenSSF Baseline](https://www.bestpractices.dev/projects/14187/baseline)](https://www.bestpractices.dev/projects/14187)
或者将其嵌入到HTML中:
<a href="https://www.bestpractices.dev/projects/14187"><img src="https://www.bestpractices.dev/projects/14187/baseline"></a>


这些是基准等级2的标准。 这些是标准版本 v2026.08.28。

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

        

 基本

  • 常规

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

    hMailServer is a free, open source email server for Microsoft Windows, implementing SMTP, IMAP and POP3. This is a maintained fork brought up to date with a current toolchain, current cryptography, and the transport-security and authentication standards expected of a mail server in 2026.

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

 控制 18/19

  • 控制


    当执行CI/CD任务且未指定权限时,CI/CD系统必须将任务的权限默认为管道中授予的最低权限。 [OSPS-AC-04.01]
    配置项目的设置,默认情况下为新管道分配最低可用权限,仅在特定任务需要时才授予额外权限。

    The repository's GitHub Actions default workflow token permission is read-only (verified via API: gh api repos/Progressiverobot/hmailserver/actions/permissions/workflow returns default_workflow_permissions=read), so any CI/CD task with no permissions specified receives a read-only GITHUB_TOKEN — the lowest default. In addition, all 10 workflows on master declare an explicit top-level permissions block: nine are read-only or empty (contents: read; contents: read + actions: read; read-all; {}), and upstream-watch.yml adds issues: write at workflow level, needed by its single job to file upstream-tracking issues. Other write scopes are granted per job only where required: id-token: write and contents: write in sign-release.yml's signing job (keyless cosign signing and asset upload), security-events: write for CodeQL and Scorecard SARIF upload (Scorecard also id-token: write), contents: write in the SBOM job to attach release assets, and pull-requests: write in dependency-review. See https://github.com/Progressiverobot/hmailserver/tree/master/.github/workflows



    当创建正式发布时,该发布必须分配一个唯一的版本标识符。 [OSPS-BR-02.01]
    为项目生成的每个发布分配一个唯一的版本标识符,遵循一致的命名约定或编号方案。示例包括SemVer、CalVer或git提交id。

    Every release is assigned a unique SemVer-style tag: v6.2.2 through v6.2.21 for stable releases, with pre-releases distinguished by suffix (v6.2.22-pre1..pre6, v6.2.23-alpha1). 25+ releases enumerated via the GitHub API each carry a distinct tag_name, and an active 'Protect release tags' ruleset protects the tags after publication. See https://github.com/Progressiverobot/hmailserver/releases



    当创建正式发布时,该发布必须包含功能和安全修改的描述性日志。 [OSPS-BR-04.01]
    确保所有发布都包含描述性的变更日志。建议确保变更日志是人类可读的,并且包含超出提交消息的详细信息,例如安全影响的描述或与不同用例的相关性。为确保机器可读性,请将内容放在markdown标题下,例如"## Changelog"。

    Each GitHub Release carries thorough, human-written notes describing functional and security modifications. v6.2.21's body is ~11.8 KB; v6.2.23-alpha1's notes describe new features, breaking changes (database schema 6022->6025), security-relevant fixes (a path silently losing mail, a COM vtable compatibility break, an installer hang), and upgrade cautions with backup instructions. Release notes name CVEs where relevant (e.g. the CVE-2023-51764 SMTP-smuggling rule). The notes are not placed under a literal '## Changelog' header, which the criterion recommends but does not require. See https://github.com/Progressiverobot/hmailserver/releases



    当构建和发布管道摄取依赖项时,它必须使用标准化工具(如果可用)。 [OSPS-BR-05.01]
    为您的生态系统使用通用工具,例如包管理器或依赖项管理工具,以在构建时摄取依赖项。这可能包括使用依赖项文件、锁文件或清单来指定所需的依赖项,然后由构建系统拉入。

    .NET dependencies are ingested with standard tooling: CI runs 'dotnet restore' (NuGet) on ControlPanel.csproj and the Tools solution (ci.yml), and Dependabot manages the nuget and github-actions ecosystems weekly (.github/dependabot.yml); GitHub Actions are pinned by commit SHA. The native C++ dependencies (OpenSSL, Boost, libpq) have no ecosystem package manager in this project's MSVC flow — they are built from pinned source versions per documented steps under %hMailServerLibs% — and every binary committed to the tree is SHA-256-inventoried in hmailserver/docs/third-party-binaries.json, enforced by the verify-binary-provenance workflow. See https://github.com/Progressiverobot/hmailserver/blob/master/.github/dependabot.yml



    当创建正式发布时,该发布必须进行签名或在包含每个资产加密哈希值的签名清单中进行说明。 [OSPS-BR-06.01]
    在构建时使用加密签名或证明(例如GPG或PGP签名、Sigstore签名、SLSA来源或SLSA VSA)对所有发布的软件资产进行签名。在签名清单或元数据文件中包含每个资产的加密哈希值。

    Since v6.2.19, every release asset is signed at release time with Sigstore cosign (keyless): sign-release.yml runs 'cosign sign-blob --bundle' over each release asset, verifies each bundle with 'cosign verify-blob' pinning the signing workflow identity before upload, and attaches a .cosign.bundle per asset. The latest stable release v6.2.21 and latest prerelease v6.2.23-alpha1 each ship the installer plus SPDX and CycloneDX SBOMs, each asset with its own .cosign.bundle. User-facing verification commands are documented in the workflow header. Releases prior to v6.2.19 predate the signing process and are unsigned. See https://github.com/Progressiverobot/hmailserver/blob/master/.github/workflows/sign-release.yml



    当项目发布版本后,项目文档必须包含项目如何选择、获取和跟踪其依赖项的描述。 [OSPS-DO-06.01]
    建议在可公开查看的资源(如源代码存储库、项目网站或其他渠道)上与项目的技术和设计文档一起发布此信息。

    Dependency handling is documented publicly: README's third-party libraries section explains how OpenSSL 4.0.x, Boost 1.91 and PostgreSQL 18 libpq are obtained and built at pinned versions under %hMailServerLibs%; .github/dependabot.yml states the tracking policy (NuGet and GitHub Actions updated weekly via Dependabot; native C++ libs tracked manually since Dependabot has no C++ ecosystem); and hmailserver/docs/ThirdPartyBinaries.md records, for each of the 40 committed binaries, what it is, where it came from, why it is present and whether it should be, with SHA-256s in third-party-binaries.json enforced by CI. SBOMs ship with each release. See https://github.com/Progressiverobot/hmailserver/blob/master/hmailserver/docs/ThirdPartyBinaries.md



    项目文档必须包含如何构建软件的说明,包括所需的库、框架、SDK 和依赖项。 [OSPS-DO-07.01]
    建议将此信息与项目的贡献者文档一起发布,例如在 CONTRIBUTING.md 或其他开发者任务文档中。也可以使用 Makefile 目标或其他自动化脚本来记录此信息。

    README.md has a contents-linked 'Building hMailServer' section covering prerequisites (Visual Studio 2026 / v145 toolset with the required workloads, Inno Setup 6, Perl, Python), step-by-step instructions for building the external libraries (OpenSSL via nmake, PostgreSQL libpq via meson, Boost via b2) under %hMailServerLibs%, and building the server, tools and installer via the build*.ps1 scripts or MSBuild, including a warning about build events on machines running a production instance. .github/CONTRIBUTING.md summarizes the same and points back to the README. See https://github.com/Progressiverobot/hmailserver/blob/master/README.md#building-hmailserver



    项目文档必须包含有权访问敏感资源的项目成员列表。 [OSPS-GV-01.01]
    通过项目源代码存储库中的members.md、governance.md、maintainers.md或类似文件等工件记录项目参与者及其角色。这可以简单到在维护者列表中包含姓名或账户句柄,或者根据项目的治理更复杂。

    The project has exactly one member with access to sensitive resources, and he is documented by name and handle on master: README states the fork 'is maintained by Christopher Holloway / Progressive Robot Ltd'; .github/CODEOWNERS lists @chrisholloway5 as owner of every path, explicitly enumerating the sensitive ones (CI workflows, release/signing files, committed third-party binaries, TLS/crypto code); SECURITY.md states it is a single-maintainer project. PR #40's GOVERNANCE.md will restate this as a formal member list once merged. See https://github.com/Progressiverobot/hmailserver/blob/master/.github/CODEOWNERS



    项目文档必须包含对项目成员角色和职责的描述 [OSPS-GV-01.02]
    通过项目源代码存储库中的members.md、governance.md、maintainers.md或类似文件等工件记录项目参与者及其角色。

    GOVERNANCE.md documents the project roles and their responsibilities: the Maintainer role (accepting changes, releasing per RELEASE.md, security response per SECURITY.md, direction via Roadmap.md, custody of critical credentials), the Contributor role (expectations set by CONTRIBUTING.md), and the Reporter role (SUPPORT.md / SECURITY.md paths). Who currently holds each role is stated by name. See https://github.com/Progressiverobot/hmailserver/blob/master/GOVERNANCE.md



    项目文档必须包含面向代码贡献者的指南,其中包含可接受贡献的要求。 [OSPS-GV-03.02]
    扩展项目文档中的CONTRIBUTING.md或CONTRIBUTING/的内容,以概述可接受的贡献要求,包括编码标准、测试要求和代码贡献者的提交指南。建议将该指南作为贡献者和批准者的真实来源。

    .github/CONTRIBUTING.md on master sets requirements for acceptable contributions: coding standards (code must build warning-free under /WX; parameterised SQL exclusively, never manually built SQL strings; new optional server features follow the INI-settings pattern), testing requirements (all changes must keep the regression suite green; add or update regression tests for behavior changes), submission guidelines (branch from master, one logical change per PR), architectural guidance on the BO/Persistence/COM layering, and licensing terms (contributions licensed under AGPLv3). See https://github.com/Progressiverobot/hmailserver/blob/master/.github/CONTRIBUTING.md



    版本控制系统必须要求所有代码贡献者在每次提交时都声明他们在法律上有权作出相关贡献。 [OSPS-LE-01.01]
    在项目的代码库中包含一个DCO,要求代码贡献者在每次提交时断言他们有合法授权提交相关贡献。使用状态检查以确保完成此断言。CLA也满足此要求。某些版本控制系统(例如GitHub)可能会在平台服务条款中包含此项。

    There is no DCO status check or CLA. The repository is hosted on GitHub, and this criterion's guidance explicitly accepts the platform's terms of service: GitHub's Terms of Service (section D) require every user, on every contribution, to represent that they have the right to post the content, and license inbound contributions under the repository's license. All contributions arrive through GitHub (a sole maintainer plus Dependabot). CONTRIBUTING.md additionally states 'By contributing you agree that your contributions are licensed under the AGPLv3'. See https://github.com/Progressiverobot/hmailserver/blob/master/.github/CONTRIBUTING.md



    当向主分支提交时,必须通过或手动绕过提交的任何自动化状态检查。 [OSPS-QA-03.01]
    配置项目的版本控制系统,要求所有自动化状态检查通过或在提交合并到主分支之前需要手动确认。建议不要将任何可选状态检查配置为批准者可能会绕过的通过或失败要求。

    master has no branch protection (GitHub API returns 404 'Branch not protected') and no branch ruleset applies to it (rules/branches/master returns an empty list; the only active ruleset protects release tags). CI, CodeQL and dependency-review workflows run on pushes and PRs, but nothing requires their status checks to pass before a commit lands: the sole maintainer pushes directly to master as the normal workflow, so a failing check cannot block a change. Adding required status checks on master would close this gap. See https://github.com/Progressiverobot/hmailserver/blob/master/.github/workflows/ci.yml



    在接受提交之前,项目的CI/CD管道必须运行至少一个自动化测试套件,以确保更改符合预期。 [OSPS-QA-06.01]
    应在每次合并到主分支之前运行自动化测试。测试套件应在CI/CD管道中运行,结果应对所有贡献者可见。测试套件应在一致的环境中运行,并应以允许贡献者在本地运行测试的方式运行。测试套件的示例包括单元测试、集成测试和端到端测试。

    The CI workflow (.github/workflows/ci.yml) triggers on every push and pull request to master and runs an automated test suite: 'dotnet test' on ControlPanel.Tests with cobertura coverage, plus a generated-code drift check and -warnaserror builds. Results are publicly visible in the Actions tab, and contributors can run the same tests locally (dotnet test; build/build-tests.ps1 and build/run-tests.ps1 are documented in CONTRIBUTING.md). Pull requests are tested before merge; every commit reaching master is tested by the same pipeline. See https://github.com/Progressiverobot/hmailserver/blob/master/.github/workflows/ci.yml



    当项目发布版本时,项目文档必须包括设计文档,展示系统中的所有操作和参与者。 [OSPS-SA-01.01]
    在项目文档中包括说明操作和参与者的设计。参与者包括可以影响系统中另一段的任何子系统或实体。确保为新功能或重大更改更新此文档。

    ARCHITECTURE.md at the repo root is a maintained 218-line design document describing the system's components and how they interact: the C++ server modules (SMTP/IMAP/POP3, delivery queue, anti-spam/anti-virus, persistence layering BO->Persistence->SQL with caches over four database backends), the COM/IDispatch API as the management seam used by the Control Panel, the test suite and third-party scripts, the optional listeners (REST, metrics, web services, ManageSieve) with their threading and TLS behavior, the scheduler, and external actors such as ClamAV, SpamAssassin, DNS and the databases. It records interaction constraints and is kept current. See https://github.com/Progressiverobot/hmailserver/blob/master/ARCHITECTURE.md



    当项目发布版本时,项目文档必须包括对已发布软件资产的所有外部软件接口的描述。 [OSPS-SA-02.01]
    记录已发布软件资产的所有软件接口(API),解释用户如何与软件交互以及期望或产生什么数据。确保为新功能或重大更改更新此文档。

    README.md documents all external interfaces of the released software: SMTP, IMAP and POP3 with per-extension RFC citations; SASL mechanisms (SCRAM-SHA-256/-PLUS); Sieve plus the ManageSieve (RFC 5804) listener with its command set; the REST administration API with its complete endpoint list (/api/v1/status, domains, accounts, queue, apikeys, tlsa) and authentication model (administrator password or scoped API keys); the Prometheus /metrics endpoint with metric names and the /livez, /readyz, /healthz probes; OTLP trace/metrics/logs endpoints; the COM/IDispatch API; and the hMailServer.ini configuration surface. ARCHITECTURE.md describes the COM API's role as the management seam. See https://github.com/Progressiverobot/hmailserver/blob/master/README.md



    当项目发布版本时,项目必须执行安全评估,以了解软件中可能发生的最可能和最具影响力的潜在安全问题。 [OSPS-SA-03.01]
    执行安全评估可以告知项目成员和下游消费者,项目了解软件中可能出现的问题。了解可能实现的威胁有助于项目管理和应对风险。此信息对下游消费者很有用,可以证明项目的安全敏锐度和实践。确保为新功能或重大更改更新此文档。

    ASSURANCE-CASE.md is the project's documented security assessment: a threat model with actors and principal attack surfaces, trust boundaries B1-B6, security claims C1-C7 argued with evidence, CWE-mapped analysis of how common implementation weaknesses are countered, and a residual-risk list. It is supported by continuous tooling on master: CodeQL on every push and pull request, OpenSSF Scorecard, and a libFuzzer harness suite under fuzz/. See https://github.com/Progressiverobot/hmailserver/blob/master/ASSURANCE-CASE.md



    项目文档必须包含协调漏洞披露(CVD)政策,并明确响应的时间框架。 [OSPS-VM-01.01]
    在目录根目录创建一个SECURITY.md文件,概述项目的协调漏洞披露政策。包括报告漏洞的方法。设定项目将如何响应和处理报告问题的期望。

    SECURITY.md (in .github/, shown on the repo's Security tab) is a full coordinated vulnerability disclosure policy with explicit timeframes: acknowledgement within 5 working days, initial assessment (reproduction or request for more information) within 10 working days, and a fix for a confirmed vulnerability within 90 days of acknowledgement. It commits to coordinated disclosure on a 90-day timetable (advisory published when the fix ships or at 90 days, whichever is first), asks reporters to flag earlier disclosure intentions, states the credit policy, and defines in-scope and out-of-scope report classes. Verified on master. See https://github.com/Progressiverobot/hmailserver/blob/master/.github/SECURITY.md



    项目文档必须提供一种方式,让贡献者能够直接向项目内的安全联系人私下报告漏洞。 [OSPS-VM-03.01]
    为安全研究人员提供一种方式,以私下向项目报告漏洞。这可能是专用电子邮件地址、Web表单、VCS专用工具、安全联系人的电子邮件地址或其他方法。

    Private vulnerability reporting is enabled on the repository (verified via the GitHub API), and SECURITY.md directs reporters to the private channel with a direct link to https://github.com/Progressiverobot/hmailserver/security/advisories/new, explicitly instructs against public issues, discussions, PRs or forum posts for security problems, and provides a fallback: a reporter who cannot use GitHub Security Advisories may open an issue containing no technical detail asking for a private channel, and the maintainer will open an advisory and invite them. Reports go directly to the maintainer, who is the security contact. See https://github.com/Progressiverobot/hmailserver/blob/master/.github/SECURITY.md



    项目文档必须公开发布已发现漏洞的相关数据。 [OSPS-VM-04.01]
    在可预测的公共渠道(例如CVE条目、博客文章或其他媒体)中提供有关已知漏洞的信息。在可能的情况下,此信息应包括受影响的版本、消费者如何确定他们是否容易受到攻击以及缓解或修复的说明。

    The project publishes vulnerability data through GitHub Security Advisories and release notes. SECURITY.md commits that once a fix is available it ships as a new build and the advisory is published with a CVE requested through GitHub, on a 90-day coordinated-disclosure timetable. To date no vulnerability has been discovered in this fork, so the public advisory list is empty (verified via the GitHub API: zero published advisories, none withheld); where upstream CVEs are relevant the release notes name them explicitly (e.g. CVE-2023-51764 SMTP smuggling, whose mitigation is enforced and pinned by a regression test). See https://github.com/Progressiverobot/hmailserver/blob/master/.github/SECURITY.md



您可以使用工具和AI系统通过简单的URL提交变更建议,例如 https://www.bestpractices.dev/zh-CN/projects/14187/choose/edit?osps_ac_01_01_status=Met&osps_ac_01_01_justification=GitHub+enforced。请参阅我们的自动化提案系统,了解具体操作方法。 该数据可在社区数据许可协议 – 许可性,版本 2.0 (CDLA-Permissive-2.0)下获取。这意味着数据接收方可以共享数据,无论是否经过修改,只要数据接收方在共享数据时提供本协议文本。请注明Progressive Robot和OpenSSF最佳实践徽章贡献者。

项目徽章条目拥有者: Progressive Robot.
最后更新于 2026-08-21 05:37:27 UTC, 最后更新于 2026-09-12 02:50:23 UTC。 最后在 2026-08-21 17:17:16 UTC 获得通过徽章。