保护 Node 应用意味着在多个层级防御常见的网络漏洞(OWASP Top 10)——输入处理、身份验证、依赖项和配置。安全是分层的(深层防御),而不是单一的修复。
1. 验证和清理所有输入
js
{ z } ;
schema = z.({ : z.().(), : z.().() });
data = schema.(req.);
保护 Node 应用意味着在多个层级防御常见的网络漏洞(OWASP Top 10)——输入处理、身份验证、依赖项和配置。安全是分层的(深层防御),而不是单一的修复。
{ z } ;
schema = z.({ : z.().(), : z.().() });
data = schema.(req.);
// ❌ string concatenation → SQL injection
db.query(`SELECT * FROM users WHERE id = ${req.params.id}`);
// ✅ parameterized queries — input is data, never executable SQL
db.query("SELECT * FROM users WHERE id = $1", [req.params.id]);
始终使用参数化查询/ORM,永远不要从用户输入构建命令(参见 child_process 的命令注入)。
✓ Hash passwords with bcrypt/argon2/scrypt (slow + salted) — never plain/SHA
✓ Store secrets in env vars, never in code/git
✓ Use httpOnly, secure, sameSite cookies for sessions (XSS-resistant)
✓ Sign/verify JWTs properly; keep tokens short-lived
import helmet from "helmet";
import rateLimit from "express-rate-limit";
app.use(helmet()); // sets secure HTTP headers (CSP, HSTS, X-Frame-Options, etc.)
app.use(rateLimit({ windowMs: 60_000, max: 100 })); // throttle abuse/brute-force
helmet 添加保护性头部;速率限制防御暴力破解和 DoS 攻击。
npm audit # check installed packages for known vulnerabilities
npm audit fix
# + keep deps updated; review postinstall scripts; pin versions via the lockfile
大多数 Node 代码都是第三方包——易受攻击的依赖项是主要攻击向量。定期审计和更新。
✓ Use HTTPS (TLS) everywhere; redirect HTTP → HTTPS
✓ Don't leak error details/stack traces to clients in production
✓ Escape output to prevent XSS (frameworks usually do this)
✓ Implement proper authorization (not just authentication) — check permissions per action
✓ CORS configured to an allowlist, not "*" for credentialed APIs
✓ Limit request body size to prevent payload-based DoS
Web 应用是持续的攻击目标,Node 应用暴露于全面的网络漏洞——注入、身份验证破坏、XSS、易受攻击的依赖项、配置错误。
单一措施不够;安全是分层的:验证输入、参数化查询、正确哈希密码、安全管理密钥、设置保护头部、速率限制、审计依赖项,并使用 HTTPS。
理解这些实践(及其背后的 OWASP 风险)对构建生产级 Node 服务的任何人都是必要的责任——单一被忽视的层级(一个注入、一个泄露的密钥、一个未打补丁的依赖项)都可能危害整个系统。