@@ -19,31 +19,26 @@ Flaws affecting components used by FrankenPHP (PHP, Caddy, Go...) or using Frank
1919
2020## Supply-chain hardening
2121
22- FrankenPHP follows the open-source security practices documented in
23- [ Astral's "Open source security at Astral" post] ( https://astral.sh/blog/open-source-security-at-astral ) :
24-
25- - ** Workflow auditing.** Every push and pull request that touches CI
26- is audited by [ zizmor] ( https://docs.zizmor.sh/ ) as a hard gate. The
27- ` unpinned-uses ` rule in ` zizmor.yaml ` requires, at a minimum, a tag
28- pin on every action.
29- - ** Least-privilege permissions.** Every workflow starts with
30- ` permissions: {} ` and only broadens access on a per-job basis, so a
31- newly added job inherits no permissions by default.
32- - ** Environment-scoped secrets.** Secrets that publish artifacts
33- (Docker Hub credentials, the website deploy token, the translation
34- API key) live in dedicated GitHub Environments (` dockerhub ` ,
35- ` website ` , ` translate ` ) instead of repository-wide secrets,
36- limiting the blast radius of a compromised job.
37- - ** Build provenance.** Release binaries are attested with
38- [ ` actions/attest-build-provenance ` ] ( https://github.com/actions/attest-build-provenance )
39- so downstream consumers can verify they were produced by this
40- repository's CI.
41- - ** Continuous dependency updates.** Dependabot tracks Go modules,
42- GitHub Actions and Docker base images; new versions land through
43- reviewable pull requests rather than implicit ` latest ` upgrades.
44- - ** No ` pull_request_target ` .** Workflows never use the
45- ` pull_request_target ` trigger, which would expose write tokens to
46- fork pull requests.
47- - ** Checkout without persisted credentials.** All ` actions/checkout `
48- steps set ` persist-credentials: false ` unless they specifically
49- need to push back to the repository.
22+ FrankenPHP follows the open-source security practices from
23+ [ Astral's security guide] ( https://astral.sh/blog/open-source-security-at-astral ) :
24+
25+ - ** Workflow auditing** --
26+ [ Super Linter] ( https://github.com/super-linter/super-linter ) runs
27+ [ zizmor] ( https://docs.zizmor.sh/ ) on every pull request.
28+ The ` unpinned-uses ` rule in ` zizmor.yaml ` requires a tag pin on every action.
29+ - ** Least-privilege permissions** --
30+ Every workflow starts with ` permissions: {} ` and only grants access per job.
31+ - ** Environment-scoped secrets** --
32+ Secrets for publishing (Docker Hub, website deploy, translation API)
33+ live in dedicated GitHub Environments (` dockerhub ` , ` website ` , ` translate ` ).
34+ - ** Build provenance** --
35+ Release binaries carry
36+ [ ` attest-build-provenance ` ] ( https://github.com/actions/attest-build-provenance )
37+ attestations.
38+ - ** Dependency updates** --
39+ Dependabot tracks Go modules, GitHub Actions, and Docker base images.
40+ - ** Safe triggers** --
41+ Workflows never use ` pull_request_target ` .
42+ - ** No persisted credentials** --
43+ All ` actions/checkout ` steps set ` persist-credentials: false `
44+ unless the job needs to push.
0 commit comments