discovery-media-player

Projetos que seguem as melhores práticas abaixo podem se autocertificar voluntariamente e mostrar que alcançaram um selo de melhores práticas da Open Source Security Foundation (OpenSSF).

Não existe um conjunto de práticas que possa garantir que o software nunca terá defeitos ou vulnerabilidades; mesmo métodos formais podem falhar se as especificações ou suposições estiverem erradas. Nem existe qualquer conjunto de práticas que possa garantir que um projeto sustentará uma comunidade de desenvolvimento saudável e bem-funcionada. No entanto, seguir as melhores práticas pode ajudar a melhorar os resultados dos projetos. Por exemplo, algumas práticas permitem revisão multipessoal antes do lançamento, o que pode ajudar a encontrar vulnerabilidades técnicas difíceis de encontrar e ajudar a construir confiança e desejo de interação repetida entre desenvolvedores de diferentes empresas. Para ganhar um selo, todos os critérios DEVE e NÃO DEVE devem ser atendidos, todos os critérios DEVERIA devem ser atendidos OU não atendidos com justificativa, e todos os critérios SUGERIDO devem ser atendidos OU não atendidos (queremos que sejam considerados pelo menos). Se você quiser inserir texto de justificativa como um comentário genérico, em vez de ser uma justificativa de que a situação é aceitável, inicie o bloco de texto com '//' seguido de um espaço. Feedback é bem-vindo via site do GitHub como questões ou pull requests Há também uma lista de discussão para discussão geral.

Fornecemos com prazer as informações em vários idiomas, no entanto, se houver qualquer conflito ou inconsistência entre as traduções, a versão em inglês é a versão autoritativa.
Se este é o seu projeto, por favor mostre o status do seu selo básico na página do seu projeto! O status do selo básico se parece com isto: O nível do selo básico para o projeto 14197 é baseline-2 Aqui está como incorporar o selo básico:
Você pode mostrar o status do seu selo básico incorporando isto no seu arquivo markdown:
[![OpenSSF Baseline](https://www.bestpractices.dev/projects/14197/baseline)](https://www.bestpractices.dev/projects/14197)
ou incorporando isto no seu HTML:
<a href="https://www.bestpractices.dev/projects/14197"><img src="https://www.bestpractices.dev/projects/14197/baseline"></a>


Estes são os critérios de Nível Básico 2. Estes são critérios da versão v2026.02.19.

Baseline Series: Nível Básico 1 Nível Básico 2 Nível Básico 3

        

 Fundamentos

  • Geral

    Observe que outros projetos podem usar o mesmo nome.

    Self-hosted document viewer: per-recipient tracked links, reading analytics, live presentation. The core knows nothing about the app hosting it.

    Use o formato de expressão de licença SPDX; exemplos incluem "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "GPL-2.0+", "LGPL-3.0+", "MIT" e "(BSD-2-Clause OR Ruby)". Não inclua aspas simples ou aspas duplas.
    Se houver mais de uma linguagem, liste-as como valores separados por vírgula (espaços opcionais) e ordene-as da mais usada para a menos usada. Se houver uma longa lista, liste pelo menos as três primeiras mais comuns. Se não houver linguagem (por exemplo, este é um projeto apenas de documentação ou apenas de teste), use o caractere único "-". Use uma capitalização convencional para cada linguagem, por exemplo, "JavaScript".
    O Common Platform Enumeration (CPE) é um esquema de nomenclatura estruturado para sistemas de tecnologia da informação, software e pacotes. Ele é usado em vários sistemas e bancos de dados ao relatar vulnerabilidades.

 Controles 19/19

  • Controles


    Quando uma tarefa de CI/CD é executada sem permissões especificadas, o sistema de CI/CD DEVE definir como padrão as permissões da tarefa para as menores permissões concedidas no pipeline. [OSPS-AC-04.01]
    Configure as definições do projeto para atribuir as menores permissões disponíveis a novos pipelines por padrão, concedendo permissões adicionais somente quando necessário para tarefas específicas.

    All eight workflows declare permissions: at the top level, so no job ever runs on an unspecified default. release.yml starts from permissions: {} — no scope at all — and grants each job only what it needs: the build job contents: read, the publish job adding id-token: write for OIDC and nothing more. ci.yml is contents: read throughout and scorecard.yml is read-all. A job needing a write scope names it at job level rather than inheriting one.



    Quando um lançamento oficial é criado, esse lançamento DEVE receber um identificador de versão único. [OSPS-BR-02.01]
    Atribua um identificador de versão único a cada versão de lançamento produzida pelo projeto, seguindo uma convenção de nomenclatura ou esquema de numeração consistente. Exemplos incluem SemVer, CalVer ou id de commit git.

    Each release carries a unique identifier: package.json declares it, npm publishes under that exact version and refuses to republish it, git carries a matching vX.Y.Z tag, and a running instance reports the same string through GET /api/doc?contract=1 so an operator can tell what is serving. The current release is v0.1.128. A release preflight guard refuses a tag whose version does not match what the repository declares, and another refuses a tag pointing at a commit that does not belong to main.



    Quando um lançamento oficial é criado, esse lançamento DEVE conter um registro descritivo de modificações funcionais e de segurança. [OSPS-BR-04.01]
    Certifique-se de que todos os lançamentos incluam um registro de alterações descritivo. É recomendado garantir que o registro de alterações seja legível por humanos e inclua detalhes além das mensagens de commit, como descrições do impacto de segurança ou relevância para diferentes casos de uso. Para garantir a legibilidade por máquina, coloque o conteúdo sob um cabeçalho markdown como \"## Changelog\"."

    Every release ships notes covering functional and security-relevant changes. CHANGELOG.md carries a dated section per version in Keep a Changelog form — including, by name and date, the findings of the three external assessments of August 2026 and the version that fixed each — and the same content is published as the GitHub Release for that tag. tools/changelog.mjs fails CI when the version being released has no matching section, so a release cannot ship without a log.



    Quando um pipeline de compilação e lançamento ingere dependências, ele DEVE usar ferramentas padronizadas quando disponíveis. [OSPS-BR-05.01]
    Use ferramentas comuns para o seu ecossistema, como gerenciadores de pacotes ou ferramentas de gerenciamento de dependências para ingerir dependências no momento da compilação. Isso pode incluir o uso de um arquivo de dependências, arquivo de bloqueio ou manifesto para especificar as dependências necessárias, que são então incorporadas pelo sistema de compilação.

    npm is the dependency manager, driven exclusively through npm ci; no workflow runs npm install. package-lock.json is committed and carries a Subresource-Integrity hash for every package in the transitive graph, so CI installs the graph the lockfile describes rather than whatever the registry served that morning. Build inputs outside npm are pinned by digest rather than tag — container base images by sha256, GitHub Actions by 40-character commit SHA — each enforced by a CI guard that refuses a floating reference. The policy is written down in docs/DEPENDENCIES.md.



    Quando um lançamento oficial é criado, esse lançamento DEVE ser assinado ou contabilizado em um manifesto assinado incluindo os hashes criptográficos de cada ativo. [OSPS-BR-06.01]
    Assine todos os ativos de software lançados no momento da construção com uma assinatura criptográfica ou atestados, como assinatura GPG ou PGP, assinaturas Sigstore, proveniência SLSA ou VSAs SLSA. Inclua os hashes criptográficos de cada ativo em um manifesto assinado ou arquivo de metadados.

    Released assets are signed at build time. The npm package is published with npm publish --provenance under OIDC trusted publishing, producing a Sigstore-signed SLSA provenance attestation that names the tarball's cryptographic digest and binds it to the workflow, repository and commit that built it; a consumer verifies it with npm audit signatures. The container image is built with provenance: mode=max and an SBOM, and pushed to GHCR with build attestations under id-token: write. No long-lived signing credential exists to hold or to leak — the signature is obtained from the platform's identity at the moment of publication.



    Quando o projeto tiver feito um lançamento, a documentação do projeto DEVE incluir uma descrição de como o projeto seleciona, obtém e rastreia suas dependências. [OSPS-DO-06.01]
    É recomendado publicar essas informações juntamente com a documentação técnica e de design do projeto em um recurso publicamente visível, como o repositório de código-fonte, site do projeto ou outro canal.

    docs/DEPENDENCIES.md describes selection, acquisition and tracking. Selection: the bar a new dependency must clear, and why it is high for a component that runs beside an operator's commercial documents — the runtime tree is one package, pdfjs-dist, pinned exactly because it is the rendering engine and its upgrade is a decision rather than a bump. Acquisition: npm ci only, against a committed lockfile with integrity hashes, with digest pinning for images and commit-SHA pinning for actions. Tracking: the Dependabot policy — monthly, tooling grouped, an action's major arriving alone so it cannot hide in a batch — including the two upgrades deliberately held back, the reason for each, and why majors are not frozen elsewhere.



    A documentação do projeto DEVE incluir instruções sobre como compilar o software, incluindo bibliotecas, frameworks, SDKs e dependências necessários. [OSPS-DO-07.01]
    Recomenda-se publicar essas informações junto com a documentação de colaboradores do projeto, como em CONTRIBUTING.md ou outra documentação de tarefas de desenvolvimento. Isso também pode ser documentado usando alvos de Makefile ou outros scripts de automação.

    CONTRIBUTING.md opens with the build: npm install, npm test, npm run lint, npm run typecheck, npm run build. It states the only prerequisite — Node 22 or later — and adds that there is nothing else to install, because the tests spin the player up in-process against a temporary folder and run offline. The browser bench and its single extra requirement are documented beside it: a Chrome already present on the machine, driven by playwright-core with no browser download, and PLAYER_E2E_CHROME to point at it if it lives somewhere unusual. README.md gives the same path for a fresh clone.



    Enquanto ativo, a documentação do projeto DEVE incluir uma lista de membros do projeto com acesso a recursos sensíveis. [OSPS-GV-01.01]
    Documente os participantes do projeto e seus papéis através de artefatos como members.md, governance.md, maintainers.md ou arquivo similar dentro do repositório de código-fonte do projeto. Isso pode ser tão simples quanto incluir nomes ou identificadores de conta em uma lista de mantenedores, ou mais complexo dependendo da governança do projeto.

    MAINTAINERS.md lists the project members and, in a dedicated table, exactly which sensitive resources each holds: repository admin, merge rights on main, GitHub Actions configuration, npm publishing, the GHCR image, and the security mailbox. There is currently one maintainer and no other account holds write access to the repository, which the file states explicitly rather than leaving to be inferred. It also records that no release credential is stored anywhere — publication authenticates through OIDC at the moment it runs, so there is no secret to hold, rotate, or lose.



    Enquanto ativo, a documentação do projeto DEVE incluir descrições dos papéis e responsabilidades dos membros do projeto. [OSPS-GV-01.02]
    Documente os participantes do projeto e seus papéis através de artefatos como members.md, governance.md, maintainers.md ou arquivo similar dentro do repositório de código-fonte do projeto.

    MAINTAINERS.md describes the roles and what each answers for. The maintainer: review and merge, what the host contract may promise and when it may break, cutting releases and being answerable for what a published version contains, and triaging vulnerability reports within the timeline SECURITY.md commits to. Contributors: no invitation to wait for, the CLA that a workflow checks on every pull request, and the project's rule on tests. Operators: no access here, but asked to report a boundary the documentation did not predict. A Bus factor section states plainly what one maintainer costs and what it does not.



    Enquanto ativo, a documentação do projeto DEVE incluir um guia para contribuidores de código que inclui requisitos para contribuições aceitáveis. [OSPS-GV-03.02]
    Estenda o conteúdo de CONTRIBUTING.md ou CONTRIBUTING/ na documentação do projeto para delinear os requisitos para contribuições aceitáveis, incluindo padrões de codificação, requisitos de testes e diretrizes de submissão para contribuidores de código. É recomendado que este guia seja a fonte da verdade tanto para contribuidores quanto para aprovadores.

    CONTRIBUTING.md states the requirements for an acceptable contribution. The project's one rule is that a behaviour worth keeping is worth a test that fails without it, and the requirement extends to the test's name: it must say which failure it prevents, not that it tests the happy path, and one that does not will be asked about in review. The same document covers what review looks for, how generated files are handled, commit and branch conventions, the language rule and the CLA; AGENTS.md records which conventions a CI guard enforces and which only review catches.



    Enquanto ativo, o sistema de controle de versão DEVE exigir que todos os contribuidores de código afirmem que estão legalmente autorizados a fazer as contribuições associadas em cada commit. [OSPS-LE-01.01]
    Inclua um DCO no repositório do projeto, exigindo que os contribuidores de código afirmem que estão legalmente autorizados a confirmar as contribuições associadas em cada commit. Use uma verificação de status para garantir que a afirmação seja feita. Um CLA também satisfaz este requisito. Alguns sistemas de controle de versão, como o GitHub, podem incluir isso nos termos de serviço da plataforma.

    Every code contributor asserts their legal right to contribute through the CLA in CLA.md, and the assertion is enforced rather than assumed: .github/workflows/cla.yml checks it on every pull request, posts and updates a comment when a signature is missing, and records signatures on a dedicated branch. An unsigned pull request does not merge, and because branch protection makes pull requests the only route into main, no contribution reaches released code without the assertion having been made and recorded. The OSPS recommendation for this control names a CLA as satisfying it.



    Quando um commit é feito na branch primária, quaisquer verificações de status automatizadas para commits DEVEM passar ou ser manualmente ignoradas. [OSPS-QA-03.01]
    Configure o sistema de controle de versão do projeto para exigir que todas as verificações de status automatizadas passem ou exijam reconhecimento manual antes que um commit possa ser mesclado na branch primária. É recomendado que quaisquer verificações de status opcionais NÃO sejam configuradas como um requisito de aprovação ou reprovação que os aprovadores possam ser tentados a ignorar.

    main is protected and its status checks must pass before a pull request can merge. The required set covers lint, typecheck and the full 1515-test suite on Node 22 and 24, CodeQL, and the repository's own guards: every GitHub Action pinned to a commit SHA, the version comment beside each SHA telling the truth, container base images pinned to a digest, the committed browser bundles still matching their TypeScript sources, the published tarball shipping compiled JavaScript rather than raw TypeScript, and no plaintext credential in any tracked file. Direct pushes, which would bypass all of it, are refused.



    Antes de um commit ser aceito, os pipelines de CI/CD do projeto DEVEM executar pelo menos um conjunto de testes automatizados para garantir que as alterações atendam às expectativas. [OSPS-QA-06.01]
    Testes automatizados devem ser executados antes de cada mesclagem na branch primária. O conjunto de testes deve ser executado em um pipeline de CI/CD e os resultados devem ser visíveis a todos os contribuidores. O conjunto de testes deve ser executado em um ambiente consistente e deve ser executado de uma maneira que permita aos contribuidores executar os testes localmente. Exemplos de conjuntos de testes incluem testes unitários, testes de integração e testes de ponta a ponta.

    ci.yml runs on every pull request and every push to main, executing the full vitest suite — 1515 tests across 144 files — on Node 22 and 24, alongside lint and typecheck. Three further benches run in the same workflow rather than on a schedule: a browser bench driving a real Chromium including an axe-core accessibility pass, a bench against a real PostgREST and Postgres instead of a stub, and a cost bench that asserts on the number of database round trips per gesture, so a performance regression fails the build instead of surfacing on an invoice.



    Quando o projeto tiver feito um lançamento, a documentação do projeto DEVE incluir documentação de design demonstrando todas as ações e atores dentro do sistema. [OSPS-SA-01.01]
    Inclua designs na documentação do projeto que expliquem as ações e atores. Atores incluem qualquer subsistema ou entidade que possa influenciar outro segmento no sistema. Certifique-se de que isso seja atualizado para novos recursos ou mudanças que quebrem compatibilidade.

    docs/ARCHITECTURE.md includes an Actors and actions section: a table of every actor — link recipient, internal reader, presenter, live attendee, host application, operator, maintainer — giving the actions each may perform and, in the column that matters most, where the decision is actually made. A second table covers the three non-human systems the design turns on: the file source and the SSRF guard that confines it to allow-listed origins, the database reached only from the server with no anonymous read policy on any table, and the host route behind PLAYER_HOST_FETCH_SECRET. The rest of the document explains the seam that makes those the only decision points.



    Quando o projeto tiver feito um lançamento, a documentação do projeto DEVE incluir descrições de todas as interfaces de software externas dos ativos de software lançados. [OSPS-SA-02.01]
    Documente todas as interfaces de software (APIs) dos ativos de software lançados, explicando como os usuários podem interagir com o software e quais dados são esperados ou produzidos. Certifique-se de que isso seja atualizado para novos recursos ou mudanças que quebrem compatibilidade.

    docs/API.md is the English reference for what a host can call and what it must implement. docs/HOST-CONTRACT.md is the binding version of the same surface, carrying a dated journal of every boundary change, and it ships inside the published package — resolvable by a consumer as discovery-media-player/contrat. TypeScript declarations in types/ describe the interface to a compiler, and src/bridge.ts is the MIT-licensed postMessage contract a host application imports to talk to the player. A CI guard compares the declared public surface against what the package actually exports, so the documentation cannot drift from the code.



    Quando o projeto tiver feito um lançamento, o projeto DEVE realizar uma avaliação de segurança para compreender os problemas de segurança potenciais mais prováveis e impactantes que poderiam ocorrer dentro do software. [OSPS-SA-03.01]
    Realizar uma avaliação de segurança informa tanto os membros do projeto quanto os consumidores a jusante que o projeto compreende quais problemas poderiam surgir dentro do software. Compreender quais ameaças poderiam se concretizar ajuda o projeto a gerenciar e tratar riscos. Essa informação é útil para os consumidores a jusante demonstrarem a perspicácia e as práticas de segurança do projeto. Certifique-se de que isso seja atualizado para novos recursos ou mudanças disruptivas.

    SECURITY.md is the assessment. It names the file proxy as the highest-value target in the codebase, precisely because it takes a URL from a caller and fetches it server-side, and enumerates the outcomes treated as vulnerabilities: reaching a file outside an allow-listed storage origin, reading a document without the right link through slug guessing or a revoked link that still opens, taking a live presentation without its control token, escalating across the host boundary or leaking PLAYER_HOST_FETCH_SECRET into a URL or a log, and XSS against a nonce-based CSP. It also states what is out of scope and why. Three external assessments were carried out in August 2026 and are published unedited in docs/, with a follow-up ledger recording what was fixed, what was decided against, and the reason.



    Enquanto ativo, a documentação do projeto DEVE incluir uma política para divulgação coordenada de vulnerabilidades (CVD), com um prazo claro para resposta. [OSPS-VM-01.01]
    Crie um arquivo SECURITY.md na raiz do diretório, descrevendo a política do projeto para divulgação coordenada de vulnerabilidades. Inclua um método para relatar vulnerabilidades. Estabeleça expectativas sobre como o projeto responderá e tratará problemas relatados.

    SECURITY.md publishes the coordinated disclosure policy with explicit timeframes: acknowledgement within 72 hours, an assessment within 7 days, then a disclosure date agreed with the reporter, and credit in the changelog unless the reporter would rather not be named. It states which versions are supported, what is and is not treated as a vulnerability, and the design notes a tester needs before starting. .github/ISSUE_TEMPLATE/config.yml links the policy from the issue chooser, so a reporter meets it before opening a public issue.



    Enquanto ativo, a documentação do projeto DEVE fornecer um meio para relato privado de vulnerabilidades diretamente aos contatos de segurança dentro do projeto. [OSPS-VM-03.01]
    Forneça um meio para que pesquisadores de segurança relatem vulnerabilidades privadamente ao projeto. Isso pode ser um endereço de e-mail dedicado, um formulário web, ferramentas especializadas do VCS, endereços de e-mail para contatos de segurança ou outros métodos.

    Private reporting is the required channel rather than an option, and there are two: GitHub private vulnerability reporting and security@3d-discovery.fr. SECURITY.md directs reporters to them instead of opening an issue, and the issue-template configuration puts the private form first, with the reason written: instances of this player serve commercial documents, and a public report would expose every operator before a fix exists. https://github.com/Juli1artha/discovery-media-player/blob/main/SECURITY.md



    Enquanto ativo, a documentação do projeto DEVE publicar publicamente dados sobre vulnerabilidades descobertas. [OSPS-VM-04.01]
    Forneça informações sobre vulnerabilidades conhecidas em um canal público previsível, como uma entrada CVE, postagem em blog ou outro meio. Na medida do possível, essa informação deve incluir versão(ões) afetada(s), como um consumidor pode determinar se está vulnerável e instruções para mitigação ou remediação.

    Discovered issues are published in a predictable public channel. CHANGELOG.md carries a dated section per version naming security-relevant fixes and the version carrying each, so a consumer can tell from a version number whether they are affected and what to upgrade to; the same content is published as the GitHub Release for that tag. The findings of the three external assessments of August 2026 are published in full in docs/, kept in the state they were received because an assessment rewritten afterwards is no longer a trace, alongside a ledger of what was fixed and what was deliberately not. SECURITY.md commits to crediting reporters there. No CVE has been assigned to date; that changelog section is where one would appear.



Estes dados estão disponíveis sob o Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0). Isso significa que um Destinatário de Dados pode compartilhar os Dados, com ou sem modificações, desde que o Destinatário de Dados disponibilize o texto deste acordo com os Dados compartilhados. Por favor, dê crédito a Julien Arthapignet e aos contribuidores do selo de melhores práticas OpenSSF.

Entrada de selo do projeto de propriedade de: Julien Arthapignet.
Entrada criada em 2026-08-22 00:19:58 UTC, última atualização em 2026-08-25 12:37:10 UTC. Selo de aprovação alcançado pela última vez em 2026-08-22 07:59:01 UTC.