Skip to content
On this page

koa-helmet

简介

koa-helmet 是一个通过设置各种 HTTP 头来帮助保护 Koa 应用程序的安全中间件。它可以防止常见的 Web 漏洞,如 XSS 攻击、点击劫持、中间人攻击等。

安装

bash
npm install koa-helmet

基本使用

javascript
const Koa = require('koa');
const helmet = require('koa-helmet');

const app = new Koa();

// 注册中间件
app.use(helmet());

app.use(async (ctx) => {
  ctx.body = { message: '已启用安全头' };
});

app.listen(3000);

高级配置

javascript
const Koa = require('koa');
const helmet = require('koa-helmet');

const app = new Koa();

app.use(helmet({
  // 配置内容安全策略 (CSP)
  contentSecurityPolicy: {
    directives: {
      defaultSrc: ["'self'"],
      scriptSrc: ["'self'", "'unsafe-inline'"],
      styleSrc: ["'self'", "'unsafe-inline'"],
      imgSrc: ["'self'", 'data:', 'https:']
    }
  },

  // 防止点击劫持
  frameguard: {
    action: 'deny'
  },

  // 隐藏 X-Powered-By
  hidePoweredBy: true,

  // 强制 HTTPS
  hsts: {
    maxAge: 31536000,
    includeSubDomains: true,
    preload: true
  },

  // 防止 XSS 攻击
  xssFilter: true,

  // 防止 MIME 类型嗅探
  noSniff: true,

  // 禁止在 iframe 中加载
  referrerPolicy: { policy: 'same-origin' }
}));

app.use(async (ctx) => {
  ctx.body = { message: '已配置安全策略' };
});

app.listen(3000);

默认启用的安全头

  1. Content-Security-Policy:控制允许加载的资源来源
  2. X-DNS-Prefetch-Control:控制 DNS 预解析
  3. Expect-CT:证书透明度监控
  4. X-Frame-Options:防止点击劫持
  5. X-Powered-By:隐藏服务器信息
  6. Strict-Transport-Security:强制使用 HTTPS
  7. X-XSS-Protection:防止 XSS 攻击
  8. X-Content-Type-Options:防止 MIME 类型嗅探

注意事项

  1. 根据应用需求合理配置 CSP,避免过度限制影响功能
  2. 在使用 WebSocket 或其他特殊功能时,可能需要调整相应的安全策略
  3. 某些旧版浏览器可能不支持部分安全头
  4. 建议在生产环境中启用所有安全特性

要保持清醒 永远不抱有意外的幻想 凭空的期待最要命