请阐述在 Node.js 开发中,保障应用安全的具体措施,并针对 SQL 注入和 XSS 这类典型漏洞给出防范思路。
考察说明
考查对 Node.js 常见安全威胁的理解及具体防护手段。
回答思路
- 【回答框架 1】SQL 注入防范:使用参数化查询或预编译语句,如数据库驱动提供的 bound parameter,避免字符串拼接 SQL;对用户输入进行严格校验和过滤,限制输入长度和类型。
- 【回答框架 2】XSS 攻击防范:对输出到 HTML 的内容进行编码转义,使用模板引擎的自动转义功能(如 EJS、Handlebars 的转义模式);实施 CSP(内容安全策略)减少脚本执行风险;对用户输入进行消毒,但需注意编码上下文(HTML、属性、URL、JS 等)。
- 【回答框架 3】其他安全措施:使用 helmet 等中间件设置安全 HTTP 头;对密码等敏感信息进行哈希加盐存储;使用 HTTPS 加密传输;限制请求速率,防止暴力破解。
- 【回答框架 4】依赖和运行时安全:定期更新依赖并检查漏洞(如 npm audit);避免使用已知不安全版本;使用安全工具进行代码扫描;遵循最小权限原则,使用非 root 运行进程。
- 【回答框架 5】输入验证和输出编码是核心:所有用户输入不可信,所有输出到客户端的内容都需要考虑上下文进行编码;对于文件上传、命令执行等场景要额外小心。
- 【关键点 1】SQL 注入的根因是拼接不可信数据到 SQL 语句,参数化查询是有效防御。
- 【关键点 2】XSS 的核心是未对输出进行转义,需按上下文编码。
- 【关键点 3】使用 helmet 设置安全头,如 CSP、X-Frame-Options。
- 【关键点 4】密码必须使用强哈希算法加盐存储,如 bcrypt。
- 【关键点 5】定期使用 npm audit 检查依赖漏洞。
- 【易错点 1】仅对输入过滤可能不足,输出编码是防止 XSS 的关键。
- 【易错点 2】盲目信任 ORM 的自动转义,复杂查询仍可能注入。
- 【易错点 3】忽略 CSP 的配置,可能导致 XSS 防护失效。