Skip to content

Security Headers

typescript
import { security, strictSecurity, relaxedSecurity, apiSecurity } from "asijs";

app.plugin(security());  // Default (good balance)

// Presets
app.plugin(security(strictSecurity));   // Maximum security
app.plugin(security(relaxedSecurity));  // More permissive
app.plugin(security(apiSecurity));      // API-focused (no CSP)

Custom Security Options

typescript
import { securityHeaders, generateNonce, nonceMiddleware } from "asijs";

app.use(securityHeaders({
  contentSecurityPolicy: {
    defaultSrc: ["'self'"],
    scriptSrc: ["'self'", (ctx) => `'nonce-${generateNonce()}'`],
    styleSrc: ["'self'", "'unsafe-inline'"],
  },
  hsts: { maxAge: 31536000, includeSubDomains: true },
  referrerPolicy: "strict-origin-when-cross-origin",
  permissionsPolicy: { camera: false, microphone: false },
}));

Nonce for Inline Scripts

typescript
app.use(nonceMiddleware());

// Access nonce in handlers:
app.get("/", (ctx) => {
  const nonce = ctx.store.nonce;
  return ctx.html(`<script nonce="${nonce}">alert('safe')</script>`);
});

Released under the MIT License.