- 实现基于 Laravel 11 和 Filament 3.X 的文档管理系统 - 添加用户认证和分组管理功能 - 实现文档上传、分类和权限控制 - 集成 Word 文档自动转换为 Markdown - 集成 Meilisearch 全文搜索引擎 - 实现文档在线预览功能 - 添加安全日志和审计功能 - 完整的简体中文界面 - 包含完整的项目文档和部署指南 技术栈: - Laravel 11.x - Filament 3.X - Meilisearch 1.5+ - Pandoc 文档转换 - Redis 队列系统 - Pest PHP 测试框架
4.8 KiB
4.8 KiB
安全日志记录
概述
知识库系统实现了全面的安全日志记录功能,用于记录所有未授权访问尝试和安全相关事件。
功能特性
1. 自动记录未授权访问
系统会自动记录以下未授权访问尝试:
- 查看文档 (view):用户尝试查看无权访问的专用文档
- 下载文档 (download):用户尝试下载无权访问的文档
- 更新文档 (update):用户尝试更新不属于自己的文档
- 删除文档 (delete):用户尝试删除不属于自己的文档
- 恢复文档 (restore):用户尝试恢复不属于自己的文档
- 永久删除 (forceDelete):用户尝试永久删除不属于自己的文档
2. 记录的信息
每条安全日志包含以下信息:
- 事件类型 (event):unauthorized_access
- 操作类型 (action):view, download, update, delete 等
- 用户信息:
- 用户 ID (user_id)
- 用户名 (user_name)
- 用户邮箱 (user_email)
- 文档信息:
- 文档 ID (document_id)
- 文档标题 (document_title)
- 文档类型 (document_type)
- 文档分组 ID (document_group_id)
- 请求信息:
- IP 地址 (ip_address)
- 时间戳 (timestamp)
- 用户代理 (user_agent)
日志配置
日志通道
安全日志使用独立的 security 通道,配置在 config/logging.php 中:
'security' => [
'driver' => 'daily',
'path' => storage_path('logs/security.log'),
'level' => env('LOG_LEVEL', 'info'),
'days' => env('LOG_SECURITY_DAYS', 90),
'replace_placeholders' => true,
],
日志保留期
默认情况下,安全日志保留 90 天。可以通过环境变量 LOG_SECURITY_DAYS 调整:
LOG_SECURITY_DAYS=90
查看日志
日志文件位置
安全日志存储在:storage/logs/security.log
每天会自动创建新的日志文件,格式为:security-YYYY-MM-DD.log
日志格式示例
[2024-12-04 10:30:45] local.WARNING: 未授权访问尝试 {"event":"unauthorized_access","action":"view","user_id":2,"user_name":"张三","user_email":"zhangsan@example.com","document_id":5,"document_title":"机密文档","document_type":"dedicated","document_group_id":3,"ip_address":"192.168.1.100","timestamp":"2024-12-04T10:30:45+08:00","user_agent":"Mozilla/5.0..."}
使用命令行查看日志
查看最新的安全日志:
tail -f storage/logs/security.log
查看今天的安全日志:
cat storage/logs/security-$(date +%Y-%m-%d).log
搜索特定用户的未授权访问:
grep "user_id\":2" storage/logs/security.log
搜索特定文档的访问尝试:
grep "document_id\":5" storage/logs/security.log
安全监控建议
1. 定期审查
建议定期审查安全日志,特别关注:
- 频繁的未授权访问尝试
- 来自异常 IP 地址的访问
- 针对敏感文档的访问尝试
- 同一用户的大量失败尝试
2. 告警设置
可以配置日志监控工具(如 ELK Stack、Graylog 等)来:
- 实时监控安全日志
- 设置告警规则
- 生成安全报告
- 可视化安全事件
3. 日志分析
使用日志分析工具可以:
- 识别攻击模式
- 发现潜在的安全威胁
- 追踪用户行为
- 生成合规报告
扩展功能
SecurityLogger 服务
系统提供了 SecurityLogger 服务类,可以用于记录其他安全事件:
use App\Services\SecurityLogger;
// 记录未授权访问
$securityLogger->logUnauthorizedAccess($user, $document, 'view');
// 记录权限验证失败
$securityLogger->logAuthorizationFailure($user, 'Document', $documentId, 'view', '用户不在分组中');
// 记录可疑活动
$securityLogger->logSuspiciousActivity($user, '短时间内大量下载尝试', [
'attempts' => 50,
'timeframe' => '5分钟'
]);
合规性
安全日志记录有助于满足以下合规要求:
- 数据保护法规:记录数据访问和使用情况
- 审计要求:提供完整的访问审计轨迹
- 安全标准:符合 ISO 27001 等安全标准
- 内部政策:支持组织的安全政策执行
注意事项
- 隐私保护:日志中包含用户信息,需要妥善保管
- 存储空间:定期清理旧日志以节省存储空间
- 性能影响:日志记录对性能影响很小,但在高并发场景下需要监控
- 日志轮转:使用 daily 驱动自动进行日志轮转
故障排查
日志未生成
- 检查
storage/logs目录权限 - 确认日志配置正确
- 检查
LOG_CHANNEL环境变量
日志文件过大
- 调整
LOG_SECURITY_DAYS减少保留天数 - 配置日志轮转策略
- 使用外部日志管理系统
无法写入日志
- 检查文件系统权限
- 确认磁盘空间充足
- 检查 SELinux 或 AppArmor 配置