Skip to content

Commit 0a4fcef

Browse files
committed
fixup! fix(@angular/ssr): validate host headers to prevent header-based SSRF
1 parent 86ea1fe commit 0a4fcef

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
@@ -56,7 +56,7 @@ describe('Serve SSR Builder', () => {
5656
.render({
5757
bootstrap: AppServerModule,
5858
documentFilePath: indexHtml,
59-
url: req.originalUrl,
59+
url: \`${protocol}://${headers.host}${originalUrl}\`,
6060
publicPath: distFolder,
6161
})
6262
.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
@@ -52,11 +52,12 @@ describe('Serve SSR Builder', () => {
5252
}));
5353
5454
server.use((req, res, next) => {
55+
const { protocol, originalUrl, baseUrl, headers } = req;
5556
commonEngine
5657
.render({
5758
bootstrap: AppServerModule,
5859
documentFilePath: indexHtml,
59-
url: req.originalUrl,
60+
url: \`${protocol}://${headers.host}${originalUrl}\`,
6061
publicPath: distFolder,
6162
})
6263
.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
@@ -55,7 +55,7 @@ describe('Serve SSR Builder', () => {
5555
.render({
5656
bootstrap: AppServerModule,
5757
documentFilePath: indexHtml,
58-
url: req.originalUrl,
58+
url: \`${protocol}://${headers.host}${originalUrl}\`,
5959
publicPath: distFolder,
6060
})
6161
.then((html) => res.send(html))

0 commit comments

Comments
 (0)