插件质量报告
插件:
bing_wallpaperHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 page.head 全站页面 head 否 5 - - app_attachments, app_replies 读 plugin_bing_wallpapers page.header 全站页面页头 否 5 - - app_attachments, app_replies 读 plugin_bing_wallpapers sidebar.feature_links 首页/侧栏快捷功能 否 5 - - - - top.bar.actions 顶部栏插件入口,同一请求只执行一次(展示位置:版块导航与搜索框前后) 否 5 - - - - 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_bing_wallpapers字段 类型 可空 默认值 约束 startdate CHAR(8) 否 - 主键 topic_id uint 否 - - reply_id uint 否 0 - image_hash string 否 - - source_url text 否 - - created_at uint 否 - - 采集 Bing 每日壁纸
漂亮
后台可设置网站默认背景:最新图片、历史图片、预设纯色或关闭背景。
增加后台默认图片模糊度,范围 0-100,默认 65。
快捷功能新增“网站壁纸”入口,用户可单独选择历史图片、纯色、关闭背景或跟随网站设置。
用户可设置个人图片背景模糊度,范围 0-100,默认 65。
背景图片采用全覆盖显示,小尺寸图片也会铺满页面。
图片背景启用时,页脚文字和链接改为白色并增加阴影。🔍 插件审查报告(对照《AI 开发规则》与开发者文档)
🔒 安全问题
plugin.php:71-91的bing_wallpaper_http_get()开启了重定向跟随,但未设置重定向上限、协议白名单与响应体大小上限。建议补CURLOPT_MAXREDIRS、CURLOPT_PROTOCOLS并用 writefunction 限流,跟随重定向时逐跳重新校验目标。
⚡ 性能问题
plugin.php:384当站点背景设为“最新图片”时,page.head每页经plugin.php:172读库取壁纸地址,建议对最新壁纸做短期缓存,避免每页查询。
🐛 功能/规范缺陷
plugin.php:369样式写死font-size:12px/14px与border-radius:8px/6px,建议改用 CSS 变量。
✅ 修复优先级
- 外部请求加固(中);2. 每页查询缓存(低);3. CSS 变量化(低)。采集流程有互斥锁与按日期幂等,整体较规范。
版本 1.7.0 更新:
新增后台开关:控制顶部菜单是否显示“桌面显示”按钮。
新增壁纸风格图标,避免与暗黑模式图标混淆。
新增桌面显示模式:- 隐藏主内容区域和页脚。- 保留顶部导航和壁纸背景。
- 支持点击按钮或按 Esc 退出。
桌面显示模式下自动取消壁纸模糊效果。
桌面显示模式下展示当前壁纸的日期、标题和介绍。
优化手机端壁纸展示,使用完整比例显示,减少裁切。
新增展示缓存:- 缓存图片、标题、介绍和日期信息到插件配置。- 新壁纸采集后立即写入缓存。
- 历史壁纸首次使用时自动回填缓存。
- 最多保留 60 条缓存记录。
管理员保存插件设置时保留已有缓存数据。
🔍 插件审查报告(AI 自动审查,对照《AI 开发规则》与开发者文档;本插件未被 8/18 楼上 350 的报告覆盖,属独立首次审查)
插件:bing_wallpaper v1.7.0
🔒 安全问题
- 后台设置页缺少显式权限校验:bing_wallpaper_admin_page() 内部未见 need_admin() 调用,仅依赖核心 admin_page() 路由层统一调用的 need_admin() 兜底。虽然当前不构成越权(因为 admin_tabs 挂载的页面天然经过后台鉴权),但和站内其它插件(如 featured_topics、user_review)普遍在各自 admin_xxx_page() 内部也显式调用 need_admin() 的写法不一致,一旦未来核心或其它插件调整了 admin_tabs 的调用路径,本插件将失去这层保护,建议补上显式校验作为纵深防御。
- 后台判断请求方式用 $_SERVER['REQUEST_METHOD'] === 'POST' 手写判断,未使用核心 require_post(),效果等价但不统一。
- 外部图片下载(bing_wallpaper_save_image)仅通过 getimagesizefromstring 校验 MIME 类型白名单(jpeg/png/gif/webp),未见对下载源做协议/主机白名单限制;但源地址固定拼接自 cn.bing.com 域名(bing_wallpaper_absolute_url 兜底),不接受用户可控输入,风险较低。
⚡ 性能问题
未发现明显问题。壁纸展示相关的读取(bing_wallpaper_background_details)有基于配置的内存/持久化缓存(display_cache 存入 plugin_config),非每次请求都查库;计划任务有文件锁防止并发采集。🐛 功能/规范缺陷
- 命名前缀检查:函数、CSS 类、Cookie 键(bing_wallpaper_preference/bing_wallpaper_blur)均带插件前缀,未见冲突。
- CSS 中存在少量非语义字面量色值(如 #101010、#fff 用于桌面模式遮罩),属于还原壁纸展示效果的场景色,可视为规则允许的例外("还原第三方品牌或表达数据类别"场景),非明显违规。
- 采集账号密码使用 random_bytes(32) 随机生成后哈希存储,不可登录使用,处理稳妥。
✅ 修复优先级
均为低优先级规范一致性问题:建议在 bing_wallpaper_admin_page() 内补充显式 need_admin() 与 require_post(),与站内其它插件写法保持一致,降低未来维护风险。版本 1.7.0 更新:
添加预览版本 1.7.1 更新:
使用新的hook,并增加位置选项版本 1.7.2 更新:
优化细节版本 1.7.2 更新:
支持v10版本 1.7.3 更新:
更新版本号