Skip to content

Commit 33f1b11

Browse files
authored
Merge pull request #389 from sboldyreva/php
Add new PHP frameworks pages
2 parents 26b15a1 + 12c3fe5 commit 33f1b11

File tree

10 files changed

+622
-8
lines changed

10 files changed

+622
-8
lines changed

docs/.vuepress/components/ELSTechnology.vue

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -967,6 +967,11 @@ const techData = [
967967
ecosystem: "PHP",
968968
ecosystemIcon: "/images/php-logo.webp",
969969
projects: [
970+
{
971+
name: "Browsershot",
972+
versions: "3.61.0",
973+
link: "./browsershot/",
974+
},
970975
{
971976
name: "Carbon",
972977
versions: "1.26.6",
@@ -977,6 +982,11 @@ const techData = [
977982
versions: "0.8.x | 1.2.x",
978983
link: "./dompdf/",
979984
},
985+
{
986+
name: "Firebase PHP-JWT",
987+
versions: "6.11.1",
988+
link: "./firebase-php-jwt/",
989+
},
980990
{
981991
name: "Laravel",
982992
versions: "5.8.38 | 8 | 10 | 11",
@@ -992,9 +1002,14 @@ const techData = [
9921002
versions: "3.x",
9931003
link: "./livewire/",
9941004
},
1005+
{
1006+
name: "PhpSpreadsheet",
1007+
versions: "4.5.0",
1008+
link: "./phpspreadsheet/",
1009+
},
9951010
{
9961011
name: "Symfony HttpFoundation",
997-
versions: "3.4.x | 4.4.x",
1012+
versions: "2.8.x | 3.4.x | 4.4.x",
9981013
link: "./symfony/",
9991014
},
10001015
{

docs/.vuepress/config-client/sidebar.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,10 @@ export default {
226226
type: 'section-header',
227227
icon: '/images/php-logo.webp',
228228
},
229+
{
230+
path: '/els-for-libraries/browsershot/',
231+
icon: '/images/spatie.webp',
232+
},
229233
{
230234
path: '/els-for-libraries/carbon/',
231235
icon: '/images/nesbot-carbon.webp',
@@ -234,6 +238,10 @@ export default {
234238
path: '/els-for-libraries/dompdf/',
235239
icon: '/images/dompdf-logo.webp',
236240
},
241+
{
242+
path: '/els-for-libraries/firebase-php-jwt/',
243+
icon: '/images/firebase.webp',
244+
},
237245
{
238246
path: '/els-for-libraries/laravel/',
239247
icon: '/images/laravel-logo.webp',
@@ -246,6 +254,10 @@ export default {
246254
path: '/els-for-libraries/livewire/',
247255
icon: '/images/livewire-logo.webp',
248256
},
257+
{
258+
path: '/els-for-libraries/phpspreadsheet/',
259+
icon: '/images/phpspreadsheet.webp',
260+
},
249261
{
250262
path: '/els-for-libraries/symfony/',
251263
icon: '/images/symfony-logo.webp',
434 Bytes
Loading
874 Bytes
Loading
1.01 KB
Loading
322 Bytes
Loading
Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
# Browsershot
2+
3+
Endless Lifecycle Support (ELS) for Browsershot from TuxCare provides security fixes for Browsershot package versions that have reached their end-of-life. This allows you to continue running your applications without vulnerability concerns, even after official support has ended.
4+
5+
## Supported Versions and Components
6+
7+
* **Browsershot** 3.61.0
8+
9+
Other versions upon request.
10+
11+
## Connection to ELS for Browsershot Repository
12+
13+
This guide outlines the steps needed to integrate the TuxCare ELS for Browsershot repository into your application. The repository provides trusted Browsershot packages that can be easily integrated into your **Composer** projects.
14+
15+
### Step 1: Get user credentials
16+
17+
You need a username and password in order to use TuxCare ELS for Browsershot repository. Anonymous access is disabled. To receive the credentials, please contact [sales@tuxcare.com](mailto:sales@tuxcare.com).
18+
19+
### Step 2: Configure Composer authentication
20+
21+
1. Create or edit the `auth.json` file for the user running Composer:
22+
23+
* **Linux/macOS**:
24+
25+
<CodeWithCopy>
26+
27+
```text
28+
~/.composer/auth.json
29+
```
30+
31+
</CodeWithCopy>
32+
33+
* **Windows**:
34+
35+
<CodeWithCopy>
36+
37+
```text
38+
%APPDATA%\Composer\auth.json
39+
```
40+
41+
</CodeWithCopy>
42+
43+
2. Use either the Composer CLI or edit `auth.json` directly to add your credentials for `nexus.repo.tuxcare.com`.
44+
45+
<CodeTabs :tabs="[
46+
{ title: 'Composer CLI', content: `composer config --global --auth http-basic.nexus.repo.tuxcare.com USERNAME PASSWORD` },
47+
{ title: 'auth.json', content: authjson }
48+
]" />
49+
50+
Replace `USERNAME` and `PASSWORD` with the credentials you received in [Step 1](#step-1-get-user-credentials).
51+
52+
### Step 3: Register the TuxCare repository
53+
54+
Add the `els_php_custom1` Composer repository either via CLI or by editing `composer.json`:
55+
56+
<CodeTabs :tabs="[
57+
{ title: 'Composer CLI', content: cli },
58+
{ title: 'composer.json', content: composerjson }
59+
]" />
60+
61+
### Step 4: Install Browsershot
62+
63+
Install the TuxCare-maintained Browsershot release that matches your project:
64+
65+
<CodeTabs :tabs="[
66+
{ title: 'Composer CLI', content: `composer require spatie/browsershot:3.61.0-p1+tuxcare` },
67+
{ title: 'composer.json', content: pkgjson }
68+
]" />
69+
70+
**Check the exact version listed in your TuxCare Nexus account to ensure you receive the most recent patched release.**
71+
72+
If you edited `composer.json` manually, run `composer update` to install the package:
73+
74+
<CodeWithCopy>
75+
76+
```text
77+
composer update
78+
```
79+
80+
</CodeWithCopy>
81+
82+
Composer will resolve dependencies against the TuxCare repository and install the patched releases.
83+
84+
### Composer Repository Configuration
85+
86+
If you encounter dependency resolution errors like:
87+
88+
`packages from higher priority repository do not match your constraint`
89+
90+
it usually means your project requires a package version that is not yet available in the TuxCare repository.
91+
92+
**Solution**: Update your `composer.json` to set the TuxCare repository as non-canonical:
93+
94+
<CodeWithCopy>
95+
96+
```
97+
{
98+
"repositories": [
99+
{
100+
"type": "composer",
101+
"url": "https://nexus.repo.tuxcare.com/repository/els_php_custom1/",
102+
"canonical": false
103+
}
104+
]
105+
}
106+
```
107+
108+
</CodeWithCopy>
109+
110+
This allows Composer to fall back to Packagist for packages not available in the TuxCare repository, while still preferring TuxCare patches when available.
111+
112+
## Vulnerability Exploitability eXchange (VEX)
113+
114+
VEX is a machine-readable format that tells you if a known vulnerability is actually exploitable in your product. It reduces false positives and helps prioritize real risks.
115+
116+
TuxCare provides VEX for Browsershot ELS versions: [security.tuxcare.com/vex/cyclonedx/els_lang_php/spatie-browsershot/](https://security.tuxcare.com/vex/cyclonedx/els_lang_php/spatie-browsershot/)
117+
118+
## How to Upgrade to a Newer Version
119+
120+
If you have already installed a TuxCare Browsershot package and want to upgrade to a newer release, update the version string in your `composer.json` file or run the `composer require` command with the new version:
121+
122+
<CodeWithCopy>
123+
124+
```text
125+
composer require spatie/browsershot:VERSION-pN+tuxcare
126+
```
127+
128+
</CodeWithCopy>
129+
130+
Then run `composer update` to apply the changes:
131+
132+
<CodeWithCopy>
133+
134+
```text
135+
composer update
136+
```
137+
138+
</CodeWithCopy>
139+
140+
## Resolved CVEs
141+
142+
Fixes for the following vulnerabilities are available in ELS for Browsershot from TuxCare:
143+
144+
<TableTabs label="Choose Browsershot version: " >
145+
146+
<template #Browsershot_3.61.0 >
147+
148+
| CVE ID | Severity | Vulnerable versions | Fixed in version |
149+
|----------------|----------|---------------------|------------------------|
150+
| CVE-2025-1026 | High | 3.61.0 | 3.61.0-p1+tuxcare |
151+
| CVE-2024-21547 | High | 3.61.0 | 3.61.0-p1+tuxcare |
152+
| CVE-2024-21549 | High | 3.61.0 | 3.61.0-p1+tuxcare |
153+
| CVE-2024-21544 | High | 3.61.0 | 3.61.0-p1+tuxcare |
154+
| CVE-2025-1022 | High | 3.61.0 | 3.61.0-p1+tuxcare |
155+
156+
</template>
157+
158+
</TableTabs>
159+
160+
If you are interested in the TuxCare Endless Lifecycle Support, contact [sales@tuxcare.com](mailto:sales@tuxcare.com).
161+
162+
<script setup>
163+
164+
const authjson =
165+
`{
166+
"http-basic": {
167+
"nexus.repo.tuxcare.com": {
168+
"username": "USERNAME",
169+
"password": "PASSWORD"
170+
}
171+
}
172+
}`
173+
174+
const composerjson =
175+
`{
176+
"repositories": [
177+
{
178+
"type": "composer",
179+
"url": "https://nexus.repo.tuxcare.com/repository/els_php_custom1/",
180+
"options": {
181+
"http": {
182+
"verify": true
183+
}
184+
}
185+
}
186+
]
187+
}`
188+
189+
const cli =
190+
`composer config repositories.tuxcare '{"type":"composer","url":"https://nexus.repo.tuxcare.com/repository/els_php_custom1/","options":{"http":{"verify":true}}}' --json`
191+
192+
const pkgjson =
193+
`{
194+
"require": {
195+
"spatie/browsershot": "3.61.0-p1+tuxcare"
196+
}
197+
}`
198+
199+
</script>
200+

0 commit comments

Comments
 (0)