• bbs1org
    IP 历史记录
    ID ip_history版本 1.4.1插件制作者 bbs1org免费659 行 / 39.3 KBHook / 后台页
    记录用户发言 IP,异步显示 IP 归属地,帮助管理员查找关联账号并进行管理。
    app/plugins/ip_history/plugin.php
    开发日志已有 1 条

    个人独立维护项目。

    • bbs1org
      bbs1org
      版本 1.4.1 cfac2545b2ca 更新:优化UI细节release
    主楼
  • 质量报告

    插件质量报告

    插件:ip_history

    Hook功能范围循环使用频率文件读写修改系统表读写系统表读写自己的表
    reply.after_render主题查看页/回帖列表逐条渲染是5----
    sidebar.stack全站侧栏组件栈否5---读 plugin_ip_history_users
    topic.after_render首页/版块列表/主题查看逐条渲染是(列表跳过)5----
    topic.after_view主题查看页完成加载否4---读 plugin_ip_history_addresses
    user.can_speak发帖权限检查否4---读 plugin_ip_history_mutes
    reply.after_save回帖保存后否3---写 plugin_ip_history_users, plugin_ip_history_addresses
    topic.after_save主题保存后否3---写 plugin_ip_history_users, plugin_ip_history_addresses

    颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。

    数据字典

    plugin_ip_history_users

    字段类型可空默认值约束
    user_iduint否-主键
    ipkey否-主键
    first_seen_atuint否--
    last_seen_atuint否--
    topic_countuint否0-
    reply_countuint否0-

    plugin_ip_history_addresses

    字段类型可空默认值约束
    ipkey否-主键
    ip_addressstring否''-
    updated_atuint否--

    plugin_ip_history_mutes

    字段类型可空默认值约束
    idid否-主键、自增
    patternkey否-唯一
    notestring否--
    enabledINTEGER否1-
    created_byuint否--
    created_atuint否--
    updated_atuint否--
    #1
  • bbs1org

    聚合记录用户发帖、回帖 IP,支持通配 IP 搜索马甲和按 IP 禁言。

    #2
  • bbs1org

    马甲无处逃

    #3
  • qq

    恐怖

    #4
  • 111

    我是马甲,来抓我

    #5
  • bbs1org

    插件会修正:IP 归属地接口存在 SSRF / DNS 重绑定风险

    #7
  • 233

    @bbs1org 已按 topic/245 完成 1.4.0 安全整改:校验目标域名全部 A/AAAA 地址,拒绝私网和保留地址,并通过 CURLOPT_RESOLVE 固定已验证解析结果。平台不允许非原作者更新同 ID,修正版源码:

    ip_history_1.4.0.php1

    #6
  • 350

    🔍 插件审查报告(对照《AI 开发规则》与开发者文档)

    🔒 安全问题

    • IP 禁言可被请求头伪造绕过。plugin.php:51 读取 HTTP_CLIENT_IP / HTTP_CF_CONNECTING_IP / HTTP_X_FORWARDED_FOR 等客户端可任意伪造的头,plugin.php:166 的 ip_history_can_speak() 据此判定是否禁言。被禁言用户每次换一个 X-Client-IP/X-Forwarded-For 即可绕过。建议禁言判定改用 REMOTE_ADDR,或仅在确认站点代理来源后信任单一可信头。

    ⚡ 性能问题

    未发现明显问题。

    🐛 功能/规范缺陷

    • plugin.php:94-99 手写 MySQL/SQLite/PostgreSQL 三套分叉的 upsert 裸 SQL,绕过 app_db_upsert();MySQL 分支 VALUES() 在 8.0.20+ 已弃用,建议封装并改用新别名语法。
    • plugin.php:48-60 的 ip_history_client_ip() 与核心 ip_addr() 逻辑重复,建议直接复用核心函数。
    • plugin.php:257/260/636 CSS 写死 font-size:11px/12px,违反“字号必须使用 var(--font-size-*)”,建议改用语义变量。

    ✅ 修复优先级

    1. 修复 IP 禁言绕过(安全);2. 复用核心 ip_addr();3. 规范化 upsert 与 CSS 字号。
    #8
  • bbs1org

    版本 1.4.1 更新:
    优化UI细节

    #9

发表回复

登录后回复