Skip to content

后端安全做法 Nodejs

后端安全是必做的,前端上传的都不可信,所以需要做

文本输入:API 接口的验证与清理

使用 express-validator 来验证和清理所有进入 API 的数据。

sh
npm install express-validator
npm install express-validator
js
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 helmet
npm install helmet
js
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 模块

程序员小洛文档