核心价值SRI 保证第三方资源未被篡改;CSP 控制脚本/样式加载源并允许受控的内联。二者协同可显著降低资源投毒与 XSS 风险。SRI 示例<link rel="stylesheet" href="https://cdn.example.com/app.css" integrity="sha256-BASE64_HASH" crossorigin="anonymous"> <script src="https://cdn.example.com/app.js" integrity="sha256-BASE64_HASH" crossorigin="anonymous"></script> Next.js 15 nonce 传递与 CSP 注入// middleware.ts import { NextResponse, NextRequest } from 'next/server' export function middleware(req: NextRequest) { const nonce = crypto.randomUUID().replace(/-/g, '') const res = NextResponse.next() res.headers.set('x-nonce', nonce) const csp = [ `default-src 'self'`, `script-src 'self' 'nonce-${nonce}' https://cdn.example.com`, `style-src 'self' 'nonce-${nonce}' https://cdn.example.com`, `img-src 'self' https: data:`, ].join('; ') res.headers.set('content-security-policy', csp) return res } export const config = { matcher: ['/((?!_next/static|_next/image).*)'] } // app/layout.tsx (RSC) import { headers } from 'next/headers' export default function RootLayout({ children }: { children: React.ReactNode }) { const nonce = headers().get('x-nonce') || '' return ( <html> <head /> <body> {children} <script nonce={nonce} dangerouslySetInnerHTML={{ __html: `window.__BOOTSTRAP__=true` }} /> </body> </html> ) } 治理建议对第三方静态资源始终使用 SRI 与 `crossorigin="anonymous"`;CDN 更新需同步生成新哈希。CSP 中仅允许可信源;对内联脚本/样式使用 nonce 或哈希,避免 `unsafe-inline`。与 `Trusted Types` 协同防止 DOM XSS 注入;对动态构造的脚本/样式进行白名单控制。结论SRI 保证资源完整性,CSP 保持执行面可控。两者在 Next.js 15 中实现简单且高效,能显著提升前端供应链与运行时安全。

发表评论 取消回复