From a430284aa21e3ae1f0d5654e55b2ad2852519cc2 Mon Sep 17 00:00:00 2001 From: wwf <yearningwang@iqtogether.com> Date: 星期三, 04 六月 2025 15:17:49 +0800 Subject: [PATCH] 初始化 --- middleware.ts | 28 +++++++++------------------- 1 files changed, 9 insertions(+), 19 deletions(-) diff --git a/middleware.ts b/middleware.ts index ac01694..e0f8f37 100644 --- a/middleware.ts +++ b/middleware.ts @@ -3,26 +3,10 @@ const NECESSARY_DOMAIN = '*.sentry.io http://localhost:* http://127.0.0.1:* https://analytics.google.com googletagmanager.com *.googletagmanager.com https://www.google-analytics.com https://api.github.com' -const wrapResponseWithXFrameOptions = (response: NextResponse, pathname: string) => { - // prevent clickjacking: https://owasp.org/www-community/attacks/Clickjacking - // Chatbot page should be allowed to be embedded in iframe. It's a feature - if (process.env.NEXT_PUBLIC_ALLOW_EMBED !== 'true' && !pathname.startsWith('/chat') && !pathname.startsWith('/workflow') && !pathname.startsWith('/completion')) - response.headers.set('X-Frame-Options', 'DENY') - - return response -} export function middleware(request: NextRequest) { - const { pathname } = request.nextUrl - const requestHeaders = new Headers(request.headers) - const response = NextResponse.next({ - request: { - headers: requestHeaders, - }, - }) - const isWhiteListEnabled = !!process.env.NEXT_PUBLIC_CSP_WHITELIST && process.env.NODE_ENV === 'production' if (!isWhiteListEnabled) - return wrapResponseWithXFrameOptions(response, pathname) + return NextResponse.next() const whiteList = `${process.env.NEXT_PUBLIC_CSP_WHITELIST} ${NECESSARY_DOMAIN}` const nonce = Buffer.from(crypto.randomUUID()).toString('base64') @@ -37,7 +21,7 @@ style-src 'self' 'unsafe-inline' ${scheme_source} ${whiteList}; worker-src 'self' ${scheme_source} ${csp} ${whiteList}; media-src 'self' ${scheme_source} ${csp} ${whiteList}; - img-src * data:; + img-src 'self' ${scheme_source} ${csp} ${whiteList}; font-src 'self'; object-src 'none'; base-uri 'self'; @@ -49,6 +33,7 @@ .replace(/\s{2,}/g, ' ') .trim() + const requestHeaders = new Headers(request.headers) requestHeaders.set('x-nonce', nonce) requestHeaders.set( @@ -56,12 +41,17 @@ contentSecurityPolicyHeaderValue, ) + const response = NextResponse.next({ + request: { + headers: requestHeaders, + }, + }) response.headers.set( 'Content-Security-Policy', contentSecurityPolicyHeaderValue, ) - return wrapResponseWithXFrameOptions(response, pathname) + return response } export const config = { -- Gitblit v1.8.0