-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmiddleware.ts
More file actions
39 lines (34 loc) · 1.53 KB
/
middleware.ts
File metadata and controls
39 lines (34 loc) · 1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import { NextResponse } from "next/server"
import type { NextRequest } from "next/server"
export function middleware(request: NextRequest) {
const response = NextResponse.next()
// Add security headers
response.headers.set("X-DNS-Prefetch-Control", "on")
response.headers.set("Strict-Transport-Security", "max-age=63072000; includeSubDomains; preload")
response.headers.set("X-XSS-Protection", "1; mode=block")
response.headers.set("X-Frame-Options", "SAMEORIGIN")
response.headers.set("X-Content-Type-Options", "nosniff")
response.headers.set("Referrer-Policy", "strict-origin-when-cross-origin")
// Add Content-Security-Policy header for production
if (process.env.NODE_ENV === "production") {
response.headers.set(
"Content-Security-Policy",
"default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://vercel.com https://vercel.live; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https://*.vercel.app; font-src 'self' data:; connect-src 'self' https://*.vercel.app https://vercel.com https://vercel.live; frame-src 'self' https://vercel.live;",
)
}
return response
}
// Only run middleware on specific paths
export const config = {
matcher: [
/*
* Match all request paths except for the ones starting with:
* - api (API routes)
* - _next/static (static files)
* - _next/image (image optimization files)
* - favicon.ico (favicon file)
* - public folder
*/
"/((?!api|_next/static|_next/image|favicon.ico|.*\\.png$|.*\\.svg$).*)",
],
}