保護 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.