Skip to content

Commit b6efc67

Browse files
committed
Enhance security policy and documentation updates
- Expanded the SECURITY.md file to clarify the reporting process for vulnerabilities, including what is in and out of scope for reporting. - Added detailed guidelines on how to handle end-of-life (EOL) software and the implications of using EOL operating systems. - Updated the documentation on choosing an image to include notes on floating vs. version-pinned tags, emphasizing the importance of selecting supported OS releases. - Revised the Upgrade Guide to explain the release process and update strategies, ensuring users understand the implications of their choices regarding image tags.
1 parent 08f66d7 commit b6efc67

4 files changed

Lines changed: 365 additions & 241 deletions

File tree

SECURITY.md

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,58 @@
11
# Security Policy
22

3-
## PHP upstream support (php.net)
3+
`serversideup/php` is a **downstream distributor**. We package PHP, NGINX, Apache, Composer, the base operating system, and related tooling into production-ready Docker images. We do not maintain those upstream projects ourselves — this policy explains what belongs here and what belongs upstream.
44

5-
The table below is the **official PHP project** support phase for each branch—not a guarantee that every branch appears in our image matrix. Use it to decide when to upgrade.
5+
## Reporting a vulnerability
6+
7+
For anything in scope below, please use **[GitHub's private vulnerability reporting](https://github.com/serversideup/docker-php/security/advisories/new)** to open a confidential report. Please include:
8+
9+
- The affected image tag and digest (e.g. `serversideup/php:8.4-fpm-nginx@sha256:…`)
10+
- Steps to reproduce and the impact
11+
- Any suggested mitigation, if you have one
12+
13+
Do not disclose details publicly (issues, discussions, social media) before a fix is released.
14+
15+
## What is in scope
16+
17+
Vulnerabilities in what *we* author and ship:
18+
19+
- Entrypoint scripts, healthchecks, helper scripts, and S6 service definitions in `src/`
20+
- Default configs we ship for PHP-FPM, NGINX, Apache, and FrankenPHP
21+
- Insecure defaults: ports, file permissions, the `www-data` user model, SSL defaults
22+
- Build pipeline integrity (GitHub Actions workflows, tag assembly, image publishing)
23+
- Documentation that materially misleads users about a security-relevant setting
624

7-
| Branch | Phase on php.net |
25+
## What is out of scope — report to the upstream project
26+
27+
Vulnerabilities in software we package but do not maintain belong with the upstream project, not here:
28+
29+
| Component | Where to report |
830
| --- | --- |
9-
| 8.5 | Active support (bug + security fixes) |
10-
| 8.4 | Active support (bug + security fixes) |
11-
| 8.3 | Security fixes only |
12-
| 8.2 | Security fixes only |
13-
| 8.1 | End of life — upgrade as soon as practical |
14-
| 8.0 | End of life — upgrade as soon as practical |
15-
| 7.4 | End of life — upgrade as soon as practical |
16-
| ≤ 7.3 | End of life — not built in this project’s current matrix |
31+
| PHP itself | [The PHP project](https://www.php.net/) (security mailing list: `security@php.net`) |
32+
| NGINX | [NGINX security advisories](https://nginx.org/en/security_advisories.html) |
33+
| Apache HTTP Server | [Apache HTTPD security](https://httpd.apache.org/security_report.html) |
34+
| Composer | [composer/composer on GitHub](https://github.com/composer/composer/security) |
35+
| Debian / Alpine base packages | The respective distribution security teams |
36+
37+
If an upstream CVE is already publicly disclosed, you don't need to file with us — we pick up upstream patches on our **weekly rebuilds (Tuesday 08:00 UTC)** for floating tags. See [How our releases work](https://serversideup.net/open-source/docker-php/docs/getting-started/upgrade-guide#how-our-releases-work) for the full cadence and which tags receive rebuilds.
1738

18-
**References**
39+
## Component lifecycle references
1940

20-
- [Supported Versions](https://www.php.net/supported-versions.php) — active and security support dates for current branches
21-
- [End-of-life branches](https://www.php.net/eol.php) — historical EOL dates
41+
Our images bundle third-party software, each with its own support window. Before reporting an issue (or pinning to a particular version), confirm the component is still receiving security fixes from its maintainers:
2242

23-
We may still ship images for **EOL** PHP versions to help migrate legacy apps; prefer a [currently supported branch](https://www.php.net/supported-versions.php) for production.
43+
| Component | Lifecycle reference |
44+
| --- | --- |
45+
| PHP | [endoflife.date/php](https://endoflife.date/php) |
46+
| Debian | [endoflife.date/debian](https://endoflife.date/debian) |
47+
| Alpine Linux | [endoflife.date/alpine-linux](https://endoflife.date/alpine-linux) |
48+
| NGINX | [endoflife.date/nginx](https://endoflife.date/nginx) |
49+
| Apache HTTP Server | [endoflife.date/apache](https://endoflife.date/apache) |
50+
| Composer | [endoflife.date/composer](https://endoflife.date/composer) |
2451

25-
---
52+
We continue to publish images for end-of-life PHP versions and operating system bases so legacy applications have a path into containers — but those bases will not receive new upstream security fixes. Use them as a stepping stone, not a destination. See [Choosing an image — Operating Systems](https://serversideup.net/open-source/docker-php/docs/getting-started/choosing-an-image#operating-systems) for the trade-off.
2653

27-
## Reporting a vulnerability
54+
## How updates flow
55+
56+
For the full release model, how floating vs. version-pinned tags behave, and how to apply your own patches to a pinned image, see the [Upgrade Guide](https://serversideup.net/open-source/docker-php/docs/getting-started/upgrade-guide).
2857

29-
Follow [our responsible disclosure policy](https://www.notion.so/Responsible-Disclosure-Policy-421a6a3be1714d388ebbadba7eebbdc8).
58+
For the EOL trade-off when picking an operating system base, see [Choosing an image — Operating Systems](https://serversideup.net/open-source/docker-php/docs/getting-started/choosing-an-image#operating-systems).

docs/content/docs/1.getting-started/5.choosing-an-image.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ Here's what each part means:
6161
| `{{operating-system}}` <br />The operating system to use. | `debian` | `alpine` <br /> `bullseye` <br /> `bookworm` <br /> `trixie` |
6262
| `{{github-release-version}}` <br />The version of the GitHub release to use. | (latest stable release) | See our [GitHub Releases](https://github.com/serversideup/docker-php/releases){target="_blank"} for specific versions. |
6363

64+
::note{title="Floating vs. version-pinned tags"}
65+
Including `{{github-release-version}}` (e.g. `8.4-fpm-nginx-v4.3.5`) creates a **version-pinned tag** that is written once and never updated. Omitting it (e.g. `8.4-fpm-nginx`) gives you a **floating tag** that we rebuild weekly with the latest security patches. The right choice depends on how you balance reproducibility against staying current — see [How our releases work](/docs/getting-started/upgrade-guide#how-our-releases-work) and [Choosing your update strategy](/docs/getting-started/upgrade-guide#choosing-your-update-strategy) in the upgrade guide.
66+
::
67+
6468
## PHP version
6569
There are many factors to consider when choosing the right PHP version. Best practices include:
6670

@@ -127,6 +131,17 @@ Choosing an operating system comes down to a few preferences, but ultimately you
127131
| `debian` (default) | Debian is a popular Linux distribution that is known for its stability and reliability. It is the default operating system for our images. |
128132
| `alpine` | Alpine is a lightweight Linux distribution that is known for its small size and low resource usage. |
129133

134+
::warning{title="Choose an OS release that's still supported"}
135+
We continue to publish images on end-of-life operating system releases (like Debian Bullseye and Alpine 3.16) so legacy applications can be containerized as a first step. Be aware that EOL bases also ship EOL versions of other software like NGINX and OpenSSL — and no amount of `apt upgrade` will get you newer ones, because the distribution itself has stopped releasing fixes.
136+
137+
Before picking a base, confirm it's currently supported:
138+
139+
- [Debian release lifecycle](https://endoflife.date/debian){target="_blank"}
140+
- [Alpine Linux release lifecycle](https://endoflife.date/alpine-linux){target="_blank"}
141+
142+
If you must start on an EOL base, treat it as a stepping stone. See [EOL versions and the legacy-modernization path](https://github.com/serversideup/docker-php/blob/main/SECURITY.md#eol-versions-and-the-legacy-modernization-path) for the recommended migration approach.
143+
::
144+
130145
### Specific versions
131146
::note
132147
Not all operating systems are available for all image variations and PHP versions. Double check [Docker Hub](https://hub.docker.com/r/serversideup/php/tags){target="_blank"} and [GitHub Packages](https://github.com/serversideup/docker-php/pkgs/container/php){target="_blank"} for the most accurate list of available tags.

0 commit comments

Comments
 (0)