Ubuntu 上 JavaScript 安全性保障清单
一 系统与运行时安全
- 保持系统与包为最新:执行sudo apt update && sudo apt upgrade;为关键系统启用自动安全更新(安装并配置unattended-upgrades)。
- 以非 root运行 Node.js,遵循最小权限原则;通过nvm管理版本,便于快速升级与回滚。
- 启用强制访问控制:使用AppArmor为 Node.js 进程设定受限配置文件(查看状态:sudo aa-status)。
- 网络与访问控制:用ufw仅开放必要端口(如 22/80/443);SSH 加固(禁用 root 登录、仅密钥认证、改端口、空闲超时)。
二 依赖与代码安全
- 依赖治理:定期执行npm audit / npm outdated,及时修复漏洞;必要时配合Snyk进行依赖漏洞扫描。
- 安全编码:禁用危险 API(如eval、new Function、setTimeout(string));启用 ESLint 等 linter 做静态检查。
- 输入与输出安全:服务端校验与清理输入;前端渲染优先使用textContent而非innerHTML,对不可信数据做转义/编码;使用DOMPurify等库清理 HTML。
- 内容安全策略(CSP):设置Content-Security-Policy响应头,尽量采用nonce/hash并禁用内联脚本,显著降低XSS风险。
- 传输安全:全站启用HTTPS/TLS,优先使用Let’s Encrypt免费证书。
三 运行时防护与请求治理
- 进程隔离与沙箱:结合AppArmor限制文件系统与网络访问;在需要执行不受信代码时,考虑v8-sandbox等沙箱方案降低影响面。
- 子进程与命令执行:使用child_process时显式设定cwd、env、uid/gid,避免命令注入与权限提升。
- 请求治理:接入express-rate-limit等限流中间件抵御暴力与滥用;配置CORS白名单,仅暴露必要源与头。
- 安全响应头:启用并正确配置Helmet(如X-Frame-Options、X-XSS-Protection、X-Content-Type-Options、Strict-Transport-Security)。
四 日志监控与审计
- 日志定位与检索:Node/Web 服务日志常位于**/var/log/(如/var/log/syslog**、/var/log/apache2/error.log);用grep -i “error” /var/log/syslog等检索异常关键词。
- 持续监控与告警:使用logwatch或ELK Stack集中化分析日志;对异常登录、频繁失败、非法路径访问等设定告警。
- 应用内日志:采用结构化日志(如Bunyan),避免在生产环境泄露堆栈与敏感信息,仅记录必要上下文。
五 快速实施清单
| 领域 |
关键动作 |
命令或配置示例 |
| 系统与权限 |
更新与自动安全更新 |
sudo apt update && sudo apt upgrade;配置 unattended-upgrades |
| 运行时账户 |
非 root 运行 |
创建低权用户;systemd 服务以该用户启动 |
| 访问控制 |
防火墙与 SSH |
sudo ufw allow 22,80,443/tcp;SSH 禁用 root、仅密钥 |
| Node 运行时 |
版本与权限 |
nvm install 20;sudo aa-status 查看 AppArmor |
| 依赖安全 |
漏洞扫描与修复 |
npm audit fix;配合 Snyk 持续监测 |
| 传输安全 |
HTTPS |
使用 Let’s Encrypt 证书启用 TLS |
| 请求治理 |
限流与 CORS |
express-rate-limit;CORS 白名单 |
| 安全头 |
启用 Helmet |
app.use(helmet()) 并配置策略 |
| 日志监控 |
集中与告警 |
/var/log/ 检索;logwatch/ELK 配置告警规则 |