保护 Node.js 和 MySQL 项目中的 API
API 是现代网络和移动应用程序的支柱。当使用 Node.js 和 MySQL 构建 API 时,安全性必须是重中之重。本指南涵盖了基本的最佳实践和代码示例,可帮助您保护 API。
API 安全架构
该图显示了 API 安全性的分层方法,包括网关、WAF、身份验证和数据库保护。
API 网关 & WAF
使用 API 网关和 Web 应用程序防火墙 (WAF) 来集中安全、速率限制和请求验证。这有助于在恶意流量到达您的 Node.js 应用程序之前对其进行阻止。
用户到数据库流程
该图显示了从用户到数据库的安全流程,以及每个步骤的身份验证和授权检查。
1. 到处使用 HTTPS
始终通过 HTTPS 为您的 API 提供服务,以加密传输中的数据。使用letsencrypt或商业SSL证书。
2. 身份验证和授权
- JWT(JSON Web 令牌):使用 JWT 进行无状态身份验证。在登录时发出令牌并在每个请求时验证它们。
- 基于角色的访问控制 (RBAC):根据用户角色限制对敏感端点的访问。
// Example: JWT middleware
const jwt = require('jsonwebtoken');
function authenticateToken(req, res, next) {
const token = req.headers['authorization']?.split(' ')[1];
if (!token) return res.sendStatus(401);
jwt.verify(token, process.env.JWT_SECRET, (err, user) => {
if (err) return res.sendStatus(403);
req.user = user;
next();
});
}3. 防止 SQL 注入
始终使用参数化查询或 ORM 库(如 Sequelize 或 Knex)来防止 SQL 注入。
// Using mysql2 with placeholders
const [rows] = await db.execute('SELECT * FROM users WHERE id = ?', [userId]);4. 输入验证和清理
使用express-validator或joi等库验证和清理所有传入数据。
5. 保护敏感数据
- 切勿存储纯文本密码。始终使用
bcrypt进行哈希处理。 - 将机密(数据库凭据、JWT 机密)存储在环境变量中,而不是代码中。
6. 速率限制和节流
使用express-rate-limit等速率限制中间件来保护您的 API 免受暴力破解和 DDoS 攻击。
7. 记录和监控
记录所有身份验证尝试和错误。使用监控工具来检测可疑活动。
8. 保持依赖关系更新
定期更新 Node.js、MySQL 和所有依赖项以修补已知漏洞。
进一步阅读
Related reading. For an explainable edge Web Application Firewall on Workstation WSL Proxy, see the WAF blog, the technical article, or wslproxy.org.