第46天 #100DayOfCode — 安全(速率限制 CORS Helmet)

发布: (2026年3月20日 GMT+8 09:37)
4 分钟阅读
原文: Dev.to

Source: Dev.to

什么是速率限制?

为什么它很重要

它可以保护你的 API 免受:

  • 暴力破解攻击
  • DDoS 攻击
  • API 滥用

示例(Express.js)

import express from "express";
import rateLimit from "express-rate-limit";

const app = express();

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 100, // limit each IP
  message: "Too many requests, please try again later."
});

app.use(limiter);

app.get("/", (req, res) => {
  res.send("Hello World!");
});

app.listen(3000);

使用场景

  • 登录接口(防止暴力破解)
  • 公共 API(避免垃圾请求)
  • 密码重置路由

什么是 CORS?

CORS(跨域资源共享)控制哪些域名可以访问你的后端。

为什么它很重要

浏览器默认会阻止来自未知来源的请求;CORS 让你定义 谁被允许

示例(Express.js)

import cors from "cors";

app.use(
  cors({
    origin: "https://yourfrontend.com",
    methods: ["GET", "POST"],
    credentials: true
  })
);

使用场景

  • 允许前端(React/Vue)与后端通信
  • 将 API 访问限制在受信任的域名
  • 启用安全的 Cookie 共享

什么是 Helmet?

Helmet 通过设置各种 HTTP 头部帮助保护你的应用。

为什么它很重要

它可以防御:

  • XSS(跨站脚本)
  • Clickjacking(点击劫持)
  • MIME sniffing(MIME 嗅探)

示例(Express.js)

import helmet from "helmet";

app.use(helmet());

使用场景

  • 自动添加安全头部
  • 防止常见的 Web 漏洞
  • 加固生产环境的 API

将速率限制、CORS 与 Helmet 组合使用

组合使用时,这些工具可以构建强大的安全层。

组合使用场景

  • 保护登录路由免受暴力破解 + 限制来源 + 安全头部
  • 防止公共 API 被滥用和未授权访问
  • 为 SaaS 应用构建生产就绪的后端
  • 阻止机器人,同时仅允许受信任的前端应用

实际案例:安全登录 API

目标

  • 防止暴力破解 → 速率限制
  • 只允许你的前端 → CORS
  • 安全头部 → Helmet

完整示例

import express from "express";
import rateLimit from "express-rate-limit";
import cors from "cors";
import helmet from "helmet";

const app = express();

// 1. Helmet (安全头部)
app.use(helmet());

// 2. CORS (仅允许前端)
app.use(
  cors({
    origin: "https://myfrontend.com",
    methods: ["POST"],
    credentials: true
  })
);

// 3. 速率限制 (保护登录)
const loginLimiter = rateLimit({
  windowMs: 10 * 60 * 1000, // 10 minutes
  max: 5, // 仅 5 次尝试
  message: "Too many login attempts, try again later"
});

app.use(express.json());

// 登录路由
app.post("/login", loginLimiter, (req, res) => {
  const { username, password } = req.body;

  if (username === "admin" && password === "1234") {
    return res.send("Login successful");
  }

  res.status(401).send("Invalid credentials");
});

app.listen(3000, () => console.log("Server running on port 3000"));

这里发生了什么?

  • Helmet → 自动保护头部
  • CORS → 只允许来自 myfrontend.com 的请求
  • 速率限制 → 阻止重复的登录尝试

这种设置显著降低了攻击面。

最后思考

速率限制 → 防止滥用
CORS → 控制谁可以访问你的 API
Helmet → 保护 HTTP 头部

后端安全并不是只加一个工具,而是要层层防护。它们一起构成了任何现代后端的简洁而强大的安全基线。如果你在构建 API 时没有使用这些措施,就相当于给攻击者留下了可乘之机。

0 浏览
Back to Blog

相关文章

阅读更多 »