Mojtaba Pourkhanlar
About meProjectsBlog

  • 👤About me
  • 🧰Projects
  • ✍️Blog

Frontend Security in Next.js 15

در Next.js 15 امنیت فقط به بک‌اند محدود نمی‌شود.
به‌دلیل

  • App Router
  • Server Components
  • Edge Middleware
  • API Routes

تنظیم درست امنیت در لایه فرانت‌اند اهمیت بسیار بالایی دارد.

1️⃣ تنظیم Security Headers در Next.js


بهترین نقطه شروع، تنظیم هدرهای امنیتی در next.config.js است.

next.config.js

/** @type {import('next').NextConfig} */
const nextConfig = {
  async headers() {
    return [
      {
        source: "/(.*)",
        headers: [
          {
            key: "X-Frame-Options",
            value: "DENY",
          },
          {
            key: "X-Content-Type-Options",
            value: "nosniff",
          },
          {
            key: "Referrer-Policy",
            value: "strict-origin-when-cross-origin",
          },
          {
            key: "Permissions-Policy",
            value: "camera=(), microphone=(), geolocation=()",
          },
          {
            key: "Strict-Transport-Security",
            value: "max-age=31536000; includeSubDomains; preload",
          },
        ],
      },
    ];
  },
};

module.exports = nextConfig;

2️⃣ Content Security Policy (CSP)


بله، CSP یکی از مهم‌ترین لایه‌های دفاعی در برابر XSS است.

{
  key: "Content-Security-Policy",
  value: `
    default-src 'self';
    script-src 'self';
    style-src 'self' 'unsafe-inline';
    img-src 'self' data: https:;
    font-src 'self';
    connect-src 'self' https://api.example.com;
    frame-ancestors 'none';
  `.replace(/\n/g, ""),
}

نکته مهم:
در پروژه‌های دارای Third-party script (مثل Analytics)، باید domain آن‌ها را به script-src اضافه کنید.

3️⃣ محافظت از API Routes


Next.js 15 (App Router)

    app/api/.../route.ts

مثال بررسی Authorization Header

import { NextResponse } from "next/server";

export async function GET(req: Request) {
  const authHeader = req.headers.get("authorization");

  if (!authHeader) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }

  // validate token here

  return NextResponse.json({ success: true });
}

همیشه ورودی‌ها را validate کنید (با Zod یا هر validator دیگر).

4️⃣ استفاده از httpOnly Cookies


در Next.js می‌توانید کوکی امن را در Route Handler تنظیم کنید:

import { cookies } from "next/headers";

export async function POST() {
  const cookieStore = cookies();

  cookieStore.set({
    name: "token",
    value: "jwt_token_here",
    httpOnly: true,
    secure: true,
    sameSite: "strict",
    path: "/",
  });

  return new Response("OK");
}

مزایا:

  • جلوگیری از دسترسی JavaScript به Token
  • کاهش ریسک سرقت Token در صورت XSS

5️⃣ Middleware برای امنیت سراسری


خب Edge Middleware در Next.js 15 می‌تواند درخواست‌ها را قبل از رسیدن به صفحه بررسی کند.

middleware.ts

import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";

export function middleware(req: NextRequest) {
  const token = req.cookies.get("token");

  if (!token && req.nextUrl.pathname.startsWith("/dashboard")) {
    return NextResponse.redirect(new URL("/login", req.url));
  }

  return NextResponse.next();
}

export const config = {
  matcher: ["/dashboard/:path*"]
,
};

کاربرد:

  • محافظت از مسیرهای خصوصی
  • بررسی توکن
  • اعمال Rate Limiting (در صورت نیاز)

6️⃣ جلوگیری از XSS در React Components


در Next.js همچنان قوانین React برقرار است:

  • از dangerouslySetInnerHTML بدون sanitize استفاده نکنید
  • ورودی‌های کاربر را validate و sanitize کنید
import DOMPurify from "dompurify";

const safeHTML = DOMPurify.sanitize(userInput);

7️⃣ تنظیم CORS در API


اگر از API جداگانه استفاده می‌کنید، CORS را دقیق تنظیم کنید:

return new Response(data, {
  headers: {
    "Access-Control-Allow-Origin": "https://yourdomain.com",
    "Access-Control-Allow-Credentials": "true",
  },
});

هرگز برای API خصوصی از:

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

استفاده نکنید.

8️⃣ Dependency & Build Security


  • اجرای منظم:
npm audit
  • استفاده از lockfile
  • به‌روزرسانی وابستگی‌ها
  • غیرفعال کردن source map در production در صورت حساس بودن کد:
productionBrowserSourceMaps: false;

چک‌لیست امنیت Next.js 15

  • تنظیم Security Headers
  • فعال‌سازی CSP
  • استفاده از httpOnly + Secure Cookies
  • محافظت از API Routes
  • استفاده از Middleware برای مسیرهای خصوصی
  • تنظیم دقیق CORS
  • بررسی وابستگی‌ها
  • اجباری بودن HTTPS

جمع‌بندی

امنیت در Next.js 15 ترکیبی از:

  • تنظیم صحیح Headerها
  • مدیریت امن Token
  • محافظت از Routeها
  • و کنترل دقیق منابع مرورگر

امنیت یک تنظیم اضافه نیست؛ بخشی از معماری پایه پروژه است.