未修补的远程代码执行漏洞:Livewire Filemanager 文件上传缺陷(CVE-2025-14894)影响 Laravel 应用

xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。


流量统计功能用于统计网站前台的访问数据,包括真人访问和爬虫访问。系统会自动区分访问者类型,并记录详细的访问信息,帮助管理员了解网站的访问情况。 系统会自动排除以下请求: 系统能够识别以下类型的爬虫: 搜索引擎爬虫: 社交媒体爬虫: 其他爬虫: 每条流量记录包含以下信息: 中间件 ( 批量写入任务 ( 数据清理命令 ( 数据模型 ( 管理界面 中间件已在 在 表名: 主要字段: 可以查看: 支持筛选: 支持筛选: 如果需要立即将缓存数据写入数据库,可以执行: 清理超过指定天数的数据: A: 系统会自动排除以下请求: 如果您的访问路径符合以上条件,将不会被统计。 A: 系统每5分钟自动批量写入一次。如果需要立即写入,可以手动执行 A: 有两种方式: A: 可以修改 A: 可以使用 Laravel Tinker: 然后执行: A: 系统采用了以下优化措施: 如果数据量仍然很大,可以考虑: A: 从 A: 可以修改 文档版本:1.0流量统计功能文档

仓库地址:https://gitee.com/teanary/teanary_service目录
功能概述
主要功能
功能特性
1. 智能过滤
/manager/*)/user/*)/api/*).css, .js, .jpg, .png 等)2. 爬虫识别
3. 数据记录
path): 访问的页面路径method): HTTP 方法(通常为 GET)ip): 访问者的 IP 地址user_agent): 浏览器或爬虫的用户代理字符串referer): 来源页面的 URLlocale): 访问时使用的语言代码is_bot): 是否为爬虫访问spider_source): 爬虫的具体来源(如 google、bing 等)count): 同一分钟内相同路径的访问次数stat_date): 统计日期(精确到分钟)技术架构
数据流程
用户访问 → TrackTraffic 中间件 → 缓存数据 → 批量写入队列 → 数据库核心组件
TrackTraffic)app/Http/Middleware/TrackTraffic.phpBatchWriteTrafficStatsJob)app/Jobs/BatchWriteTrafficStatsJob.phpCleanOldTrafficStats)app/Console/Commands/CleanOldTrafficStats.phpTrafficStatistic)app/Models/TrafficStatistic.phpapp/Filament/Manager/Pages/TrafficStatistics.phpapp/Filament/Manager/Resources/TrafficStatisticResource.php缓存机制
traffic:queue:Y-m-d-H-i配置说明
1. 中间件注册
routes/web.php 中注册:Route::prefix('{locale}')->middleware([
SetLocaleAndCurrency::class,
\App\Http\Middleware\TrackTraffic::class
])->group(function () {
// 前台路由
});2. 定时任务配置
routes/console.php 中已配置:// 流量统计批量写入任务(每5分钟执行一次)
Schedule::command('app:batch-write-traffic-stats --queue')
->everyFiveMinutes()
->withoutOverlapping()
->runInBackground();
// 流量统计数据清理任务(每天凌晨2点执行,清理90天前的数据)
Schedule::command('app:clean-old-traffic-stats')
->dailyAt('02:00')
->withoutOverlapping();3. 数据库表结构
traffic_statisticsid: 主键(雪花ID)path: 访问路径(索引)method: HTTP 方法(索引)ip: IP 地址(索引)user_agent: 用户代理referer: 来源页面locale: 语言代码(索引)is_bot: 是否为爬虫(索引)spider_source: 爬虫来源(索引)count: 访问次数stat_date: 统计时间(索引,精确到分钟)使用方法
1. 查看统计看板
2. 查看详细列表
3. 手动触发批量写入
php artisan app:batch-write-traffic-stats4. 手动清理数据
# 清理90天前的数据(默认)
php artisan app:clean-old-traffic-stats
# 清理30天前的数据
php artisan app:clean-old-traffic-stats --days=30
# 清理180天前的数据
php artisan app:clean-old-traffic-stats --days=180数据管理
数据保留策略
数据统计方法
获取指定时间范围内的统计数据
use App\Models\TrafficStatistic;
use Illuminate\Support\Carbon;
// 获取最近7天的所有数据
$startDate = Carbon::today()->subDays(6);
$endDate = Carbon::today()->endOfDay();
$stats = TrafficStatistic::getStatsByDateRange($startDate, $endDate);
// 只获取真人访问数据
$humanStats = TrafficStatistic::getStatsByDateRange($startDate, $endDate, false);
// 只获取爬虫访问数据
$botStats = TrafficStatistic::getStatsByDateRange($startDate, $endDate, true);获取热门页面
// 获取最近7天的热门页面 Top 10
$topPages = TrafficStatistic::getTopPages($startDate, $endDate, 10);
// 只获取真人访问的热门页面
$topHumanPages = TrafficStatistic::getTopPages($startDate, $endDate, 10, false);
// 只获取爬虫访问的热门页面
$topBotPages = TrafficStatistic::getTopPages($startDate, $endDate, 10, true);常见问题
Q1: 为什么有些访问没有被统计?
Q2: 数据多久写入一次数据库?
php artisan app:batch-write-traffic-stats 命令。Q3: 如何修改数据保留时间?
routes/console.php,修改 --days 参数php artisan app:clean-old-traffic-stats --days=天数Q4: 爬虫识别不准确怎么办?
app/Http/Middleware/TrackTraffic.php 中的 isBot() 和 getSpiderSource() 方法,添加或修改爬虫识别规则。Q5: 如何查看缓存中的数据?
php artisan tinker// 查看某个时间点的队列
Cache::get('traffic:queue:2026-01-17-14-30');
// 查看所有流量相关的缓存键(需要 Redis)
Redis::keys('traffic:*');Q6: 数据量很大,会影响性能吗?
Q7: 如何禁用流量统计?
routes/web.php 中移除 TrackTraffic::class 中间件即可。Q8: 可以统计其他路径吗?
app/Http/Middleware/TrackTraffic.php 中的 shouldTrack() 方法,调整过滤规则。相关文件
app/Http/Middleware/TrackTraffic.phpapp/Jobs/BatchWriteTrafficStatsJob.phpapp/Console/Commands/CleanOldTrafficStats.phpapp/Models/TrafficStatistic.phpapp/Filament/Manager/Pages/TrafficStatistics.phpapp/Filament/Manager/Resources/TrafficStatisticResource.phpdatabase/migrations/2026_01_17_204550_create_traffic_statistics_table.php更新日志
2026-01-17
最后更新:2026-01-17