Skip to content

Commit 45a741f

Browse files
committed
fixup! fix(@angular/ssr): validate host headers to prevent header-based SSRF
1 parent 5882beb commit 45a741f

File tree

4 files changed

+8
-3
lines changed

4 files changed

+8
-3
lines changed

packages/angular/ssr/node/src/common-engine/common-engine.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,10 @@ export class CommonEngine {
124124
}
125125

126126
private validateHost(url: string): void {
127+
if (!URL.canParse(url)) {
128+
throw new Error(`URL "${url}" is invalid.`);
129+
}
130+
127131
const hostname = new URL(url).hostname.replace(WWW_HOST_REGEX, '');
128132

129133
if (this.allowedHosts.has(hostname)) {

packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ describe('Serve SSR Builder', () => {
5858
.render({
5959
bootstrap: AppServerModule,
6060
documentFilePath: indexHtml,
61-
url: req.originalUrl,
61+
url: \`${protocol}://${headers.host}${originalUrl}\`,
6262
publicPath: distFolder,
6363
})
6464
.then((html) => res.send(html))

packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/ssl_spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,12 @@ describe('Serve SSR Builder', () => {
5454
}));
5555
5656
server.use((req, res, next) => {
57+
const { protocol, originalUrl, baseUrl, headers } = req;
5758
commonEngine
5859
.render({
5960
bootstrap: AppServerModule,
6061
documentFilePath: indexHtml,
61-
url: req.originalUrl,
62+
url: \`${protocol}://${headers.host}${originalUrl}\`,
6263
publicPath: distFolder,
6364
})
6465
.then((html) => res.send(html))

packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/works_spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ describe('Serve SSR Builder', () => {
5757
.render({
5858
bootstrap: AppServerModule,
5959
documentFilePath: indexHtml,
60-
url: req.originalUrl,
60+
url: \`${protocol}://${headers.host}${originalUrl}\`,
6161
publicPath: distFolder,
6262
})
6363
.then((html) => res.send(html))

0 commit comments

Comments
 (0)