日志是开发的"眼睛",但也可能泄露秘密
开发时,日志是最常用的调试手段:
- 打印请求参数
- 打印用户信息
- 打印错误详情
- 打印数据库查询结果
但日志里,可能藏着敏感信息。
日志中常见的敏感信息
1. 用户密码
错误:
[INFO] User login: username=zhangsan, password=123456
正确: 密码不应该出现在日志中。
2. 个人信息
错误:
[INFO] User info: name=张三, idcard=110101199001011234, phone=13800138000
正确: 身份证号、手机号应该脱敏。
3. API 密钥
错误:
[DEBUG] API request: key=sk-abc123def456, url=https://api.example.com
正确: API 密钥不应该出现在日志中。
4. 数据库连接字符串
错误:
[INFO] Database connected: mysql://root:password@192.168.1.100:3306/mydb
正确: 数据库密码不应该出现在日志中。
5. Session Token
错误:
[DEBUG] Session created: token=eyJhbGciOiJIUzI1NiJ9...
正确: Token 不应该完整出现在日志中。
日志泄露的 3 个途径
途径一:日志文件被访问
- 服务器日志文件可能被未授权访问
- 日志文件权限设置不当
- 日志被攻击者获取
途径二:日志被发送到监控系统
- 日志被发送到 ELK、Splunk 等监控系统
- 多人可以查看日志
- 敏感信息被多人看到
途径三:日志被发送到第三方
- 应用使用第三方日志服务(如 Sentry)
- 日志被发送到第三方服务器
- 敏感信息被第三方获取
如何安全地写日志?
1. 不记录敏感信息
原则: 密码、密钥、Token 不出现在日志中。
2. 脱敏处理
脱敏规则:
- 手机号:
138****8000 - 身份证号:
110101****1234 - 银行卡号:
6222****1234 - 姓名:
张*
3. 使用日志脱敏框架
- Java:Logback 脱敏插件
- Python:自定义 Formatter
- Go:logrus 钩子
4. 日志级别控制
- 生产环境日志级别设为 INFO 或 WARN
- DEBUG 日志不输出到生产环境
- 敏感信息只在 DEBUG 级别记录(且不输出到生产)
5. 日志文件权限
- 日志文件设置适当的权限
- 只有授权人员可以查看
- 定期清理旧日志
一句话总结
日志里可能有密码、密钥、个人信息。不记录敏感信息,脱敏后再记录,控制日志级别和文件权限。
标签: 开发安全、日志安全、数据保护、信息安全意识