第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 时没有使用这些措施,就相当于给攻击者留下了可乘之机。