Nuxt Security Module

2.5.1 · active · verified Wed Apr 22

The Nuxt Security module is a robust solution for enhancing the security posture of Nuxt 3 applications by automatically configuring HTTP headers and server middleware according to OWASP principles. It provides features such as Content Security Policy (CSP), HTTP Strict Transport Security (HSTS), X-XSS-Protection, Referrer-Policy, and Permissions-Policy, alongside runtime protections like request size and rate limiters, Cross-Site Scripting (XSS) validation, and Cross-Origin Resource Sharing (CORS) support. The module also offers optional features like basic authentication, allowed HTTP methods control, and CSRF protection. Currently stable at version 2.5.1, `nuxt-security` maintains a rapid release cycle, with frequent hotfixes and minor versions addressing issues, introducing new features, and keeping pace with Nuxt 3 updates. Its primary differentiator is the comprehensive, opinionated, and automatic application of common security best practices without extensive manual configuration. It focuses on server-side protections and integration with Nuxt's SSR/SSG capabilities.

Common errors

Warnings

Install

Imports

Quickstart

This configuration enables various security features for a Nuxt application, including a strict Content Security Policy, XSS protection, rate limiting for all API routes, restricted HTTP methods, XSS validation for form submissions, and basic authentication for an '/admin' section. Remember to set `BASIC_AUTH_USERNAME` and `BASIC_AUTH_PASSWORD` environment variables for basic authentication.

import { defineNuxtConfig } from 'nuxt';
import type { ModuleOptions } from 'nuxt-security';

const securityConfig: ModuleOptions = {
  headers: {
    contentSecurityPolicy: {
      value: {
        'default-src': ["'self'", "https://cdn.example.com"],
        'script-src': ["'self'", "'unsafe-inline'", "'unsafe-eval'", "https://cdn.example.com"],
        'style-src': ["'self'", "'unsafe-inline'", "https://cdn.example.com"]
      },
      route: '/**'
    },
    xXSSProtection: { value: '1; mode=block', route: '/**' },
    noSniff: { value: true, route: '/**' }
  },
  rateLimiter: {
    value: {
      tokens: 10,
      interval: 30000,
      headers: true,
      driver: {
        name: 'lru-cache',
        options: { max: 1000, ttl: 60000 }
      },
      statusCode: 429,
      statusMessage: 'Too Many Requests'
    },
    route: '/api/**'
  },
  allowedHTTPMethods: {
    value: ['GET', 'POST', 'PUT', 'DELETE'],
    route: '/api/**'
  },
  xssValidator: {
    value: true,
    route: '/forms/**'
  },
  basicAuth: {
    value: {
      name: process.env.BASIC_AUTH_USERNAME ?? 'admin',
      pass: process.env.BASIC_AUTH_PASSWORD ?? 'password',
      enabled: true,
      message: 'Authentication Required'
    },
    route: '/admin/**'
  }
};

export default defineNuxtConfig({
  modules: [
    'nuxt-security'
  ],
  security: securityConfig
});

view raw JSON →