Ubuntu 环境下 JavaScript 安全加固清单
一 运行环境安全
- 保持系统与依赖更新:定期执行 sudo apt update && sudo apt upgrade;为关键补丁启用自动更新(安装 unattended-upgrades 并配置策略)。
- 最小权限运行:创建非 root专用用户运行服务,禁止在生产以 root 启动 Node.js。
- 版本管理:使用 nvm 管理 Node.js,便于快速升级到包含安全修复的版本。
- 进程隔离:启用 AppArmor(如执行 sudo aa-status 查看状态),为 Node 进程配置最小化权限策略。
- 网络与端口:使用 ufw 仅开放必要端口(如 22/80/443),减少攻击面。
二 Node.js 服务端安全
- 传输加密:全站启用 HTTPS,优先使用 Let’s Encrypt 免费证书。
- 请求治理:限制请求体大小、启用 express-rate-limit 等限流中间件,缓解 DoS。
- 输入校验与输出编码:对接口参数进行严格校验;渲染时使用安全 API(如 textContent),避免 innerHTML 直接插入不可信数据。
- 安全头部:启用 Helmet 设置 CSP、X-Frame-Options、X-XSS-Protection、Strict-Transport-Security 等。
- 身份认证与口令存储:使用 bcrypt/scrypt 哈希密码,启用 MFA;会话使用安全 Cookie(HttpOnly、Secure、SameSite)。
- 依赖安全:定期执行 npm audit / npm outdated,结合 Snyk 持续监测并修复依赖漏洞。
- 错误处理:生产环境不暴露堆栈与敏感信息,统一记录到日志并返回通用错误。
三 前端与浏览器侧安全
- 内容安全策略 CSP:禁用内联脚本与 eval,仅允许受信源;优先采用 nonce/hash 策略配合构建工具。
- 表单与输入:结合 HTML5 表单验证 与 Constraint Validation API,并在服务端再次校验。
- 避免危险 API:不使用 eval()、new Function()、setTimeout(string) 等可执行字符串的接口。
- 第三方脚本治理:仅引入必要且可信的 CDN 资源,使用 Subresource Integrity(SRI) 校验完整性,减少供应链风险。
- 安全传输:确保站点全站 HTTPS,避免混合内容。
四 日志监控与审计
- 日志定位与检索:系统与应用日志常位于 /var/log/(如 /var/log/syslog、/var/log/apache2/error.log);使用 grep -i “error” /var/log/syslog 等检索可疑事件。
- 持续监控与告警:部署 logwatch 或 ELK Stack 做自动化分析与报表,及时发现异常访问与攻击迹象。
- 运行时观测:在服务中集成结构化日志(如 Bunyan),并与 New Relic/Datadog 等监控平台联动。
五 快速检查清单
| 领域 |
关键动作 |
工具或配置 |
| 系统与权限 |
更新补丁、最小权限、nvm、AppArmor |
apt、unattended-upgrades、nvm、aa-status |
| 网络与端口 |
仅开放 22/80/443 |
ufw |
| 服务端 |
HTTPS、限流、输入校验、安全头部、依赖审计、非 root |
Let’s Encrypt、express-rate-limit、Helmet、npm audit/Snyk |
| 前端 |
CSP、禁用内联脚本、避免 eval、SRI |
CSP 头、Subresource Integrity |
| 日志与监控 |
集中日志、关键词检索、可视化告警 |
/var/log、grep、logwatch/ELK、Bunyan/New Relic |
以上措施覆盖 Ubuntu 主机、Node.js 运行时、前端代码与运维观测四个层面,按此清单实施可显著提升 JavaScript 应用的安全性与可运维性。