Appearance
后端安全做法 Nodejs
后端安全是必做的,前端上传的都不可信,所以需要做
文本输入:API 接口的验证与清理
使用 express-validator 来验证和清理所有进入 API 的数据。
sh
npm install express-validatornpm install express-validatorjs
const express = require("express");
const { body, validationResult } = require("express-validator");
const app = express();
app.use(express.json()); // 用于解析 JSON 请求体
app.post(
"/api/register",
// ---- 验证 ----
body("email").isEmail().withMessage("请输入有效的邮箱地址").normalizeEmail(), // 清理邮箱格式
body("password").isLength({ min: 8 }).withMessage("密码长度不能少于8位"),
body("username")
.trim() // 去除首尾空格
.escape(), // 转义 HTML 特殊字符,如 <, >, & 等
// ---- 验证结束 ----
(req, res) => {
// 检查验证结果
const errors = validationResult(req);
if (!errors.isEmpty()) {
// 如果有错误,返回 400 和错误信息
return res.status(400).json({ errors: errors.array() });
}
// 如果数据安全,继续处理业务逻辑
const { username, email, password } = req.body;
console.log("Sanitized and validated data:", { username, email });
// ... 保存到数据库等操作 (使用 ORM 防止 SQL 注入)
res.status(201).send("用户注册成功!");
}
);const express = require("express");
const { body, validationResult } = require("express-validator");
const app = express();
app.use(express.json()); // 用于解析 JSON 请求体
app.post(
"/api/register",
// ---- 验证 ----
body("email").isEmail().withMessage("请输入有效的邮箱地址").normalizeEmail(), // 清理邮箱格式
body("password").isLength({ min: 8 }).withMessage("密码长度不能少于8位"),
body("username")
.trim() // 去除首尾空格
.escape(), // 转义 HTML 特殊字符,如 <, >, & 等
// ---- 验证结束 ----
(req, res) => {
// 检查验证结果
const errors = validationResult(req);
if (!errors.isEmpty()) {
// 如果有错误,返回 400 和错误信息
return res.status(400).json({ errors: errors.array() });
}
// 如果数据安全,继续处理业务逻辑
const { username, email, password } = req.body;
console.log("Sanitized and validated data:", { username, email });
// ... 保存到数据库等操作 (使用 ORM 防止 SQL 注入)
res.status(201).send("用户注册成功!");
}
);通用安全设置:使用 Helmet
helmet 会自动帮你设置一些重要的安全相关的 HTTP 头部。
sh
npm install helmetnpm install helmetjs
const express = require("express");
const helmet = require("helmet");
const app = express();
// 使用 helmet 设置安全头,建议作为第一个中间件
app.use(helmet());
app.get("/", (req, res) => {
res.send("Hello with secure headers!");
});
// ... 你的其他路由和中间件const express = require("express");
const helmet = require("helmet");
const app = express();
// 使用 helmet 设置安全头,建议作为第一个中间件
app.use(helmet());
app.get("/", (req, res) => {
res.send("Hello with secure headers!");
});
// ... 你的其他路由和中间件当然还有一个文件上传的,需要配置 multer 模块
小洛的前端技术博客