Skip to content

Commit 23defb5

Browse files
committed
feat(docs): add CSP
1 parent e95da4d commit 23defb5

File tree

2 files changed

+61
-1
lines changed

2 files changed

+61
-1
lines changed

apps/docs/src/middleware.ts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import { NextResponse, type NextRequest } from "next/server";
2+
3+
export function middleware(request: NextRequest) {
4+
const nonce = Buffer.from(crypto.randomUUID()).toString("base64");
5+
6+
const cspHeader = `
7+
default-src 'self';
8+
script-src 'self' 'nonce-${nonce}' 'strict-dynamic';
9+
style-src 'self' 'nonce-${nonce}';
10+
img-src 'self' blob: data:;
11+
font-src 'self';
12+
object-src 'none';
13+
base-uri 'self';
14+
form-action 'self';
15+
frame-ancestors 'none';
16+
upgrade-insecure-requests;
17+
`;
18+
19+
// Replace newline characters and spaces
20+
const contentSecurityPolicyHeaderValue = cspHeader.replace(/\s{2,}/g, " ").trim();
21+
22+
const requestHeaders = new Headers(request.headers);
23+
requestHeaders.set("x-nonce", nonce);
24+
25+
if (process.env.NODE_ENV === "production") {
26+
requestHeaders.set("Content-Security-Policy", contentSecurityPolicyHeaderValue);
27+
}
28+
29+
const response = NextResponse.next({
30+
request: {
31+
headers: requestHeaders,
32+
},
33+
});
34+
35+
if (process.env.NODE_ENV === "production") {
36+
response.headers.set("Content-Security-Policy", contentSecurityPolicyHeaderValue);
37+
}
38+
39+
return response;
40+
}
41+
42+
export const config = {
43+
matcher: [
44+
/*
45+
* Match all request paths except for the ones starting with:
46+
* - api (API routes)
47+
* - _next/static (static files)
48+
* - _next/image (image optimization files)
49+
* - favicon.ico (favicon file)
50+
*/
51+
{
52+
source: "/((?!api|_next/static|_next/image|favicon.ico).*)",
53+
missing: [
54+
{ type: "header", key: "next-router-prefetch" },
55+
{ type: "header", key: "purpose", value: "prefetch" },
56+
],
57+
},
58+
],
59+
};

turbo.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
"NEXT_PUBLIC_DOCSEARCH_INDEX_NAME",
3232
"WEBFLOW_API_KEY",
3333
"WEBFLOW_BLOG_ID",
34-
"WEBFLOW_CASE_STUDIES_ID"
34+
"WEBFLOW_CASE_STUDIES_ID",
35+
"NODE_ENV"
3536
]
3637
},
3738
"clean": {

0 commit comments

Comments
 (0)