debian

Node.js日志在Debian上的安全性分析

小樊
35
2026-01-03 00:10:55
栏目: 编程语言

Node.js日志在Debian上的安全性分析

一 威胁与风险概览

二 安全基线配置清单

三 关键配置示例

const express = require('express');
const morgan = require('morgan');
const fs = require('fs');
const path = require('path');

// 安全脱敏 token
morgan.token('password', (req) =>
  req.body && req.body.password ? '******' : '-'
);
morgan.token('safe-ip', (req) => {
  const ip = req.ip || '';
  return ip.replace(/(\d+)\.(\d+)\.(\d+)\.(\d+)/, '$1.$2.*.*');
});
morgan.token('filtered-query', (req) => {
  const q = new URLSearchParams(req.query).toString();
  ['id','phone','email'].forEach(k => { if (q.includes(k+'=')) q = q.replace(k+'=([^&]*)', k+'=***'); });
  return q;
});
// 生产安全格式
morgan.format('secure', ':safe-ip - :remote-user [:date[iso]] ":method :url" :status :response-time ms');

const app = express();
// 仅记录异常或需要审计的请求
app.use(morgan('secure', {
  skip: (req, res) => process.env.NODE_ENV === 'production' && res.statusCode < 400 && req.method === 'GET'
}));
sudo mkdir -p /var/log/myapp
sudo chown -R node:node /var/log/myapp
sudo chmod 0700 /var/log/myapp
# 应用内创建文件时 mode 0600,或由 logrotate 的 create 0640 控制
/var/log/myapp/*.log {
  daily
  rotate 7
  compress
  missingok
  notifempty
  create 0640 root adm
  postrotate
    systemctl reload myapp.service >/dev/null 2>&1 || true
  endscript
}
const fs = require('fs');
const crypto = require('crypto');
const algorithm = 'aes-256-cbc';
const key = crypto.scryptSync(process.env.LOG_SECRET, 'salt', 32);
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv(algorithm, key, iv);
const input = fs.createReadStream('app.log');
const output = fs.createWriteStream('app.log.enc');
output.write(iv); // 前缀 IV
input.pipe(cipher).pipe(output);

提示:加密密钥需妥善管控(如 KMS/Secrets Manager),并做好密钥轮换与备份。

四 集中化与合规要点

五 快速加固清单

检查项 推荐值/做法 说明
日志库与级别 Winston/Pino/Bunyan;生产以 error/warn/info 为主 避免滥用 debug
HTTP 日志格式 自定义 morgan 格式并脱敏 不用 combined/common
目录/文件权限 目录 0700;文件 0600;属主 node:node 仅必要主体可读写
轮转与保留 daily;rotate 7;compress;create 0640 root adm 防膨胀与便于审计
传输加密 TLS 到集中式日志平台 防窃听
存储加密 极敏感日志用 crypto/GPG 加密 降低泄露影响
集中化与告警 ELK/Graylog + SIEM 规则告警 实时检测与响应
审计事件 登录/登出、权限与配置变更 满足审计与合规
监控与趋势 Kibana/Grafana 仪表盘与阈值告警 运营与安全可视化

0
看了该问题的人还看了