8000 GitHub - JackCh3n/1mg: 1mg 图床 · GitHub
[go: up one dir, main page]

Skip to content
JackCh3nPublic

About

1mg 图床

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

1mg 图床

实现功能

  • 鉴别图片等级 (moderatecontent 接口)
  • 图片压缩 (上传时 GD 重编码压缩 JPEG/PNG、超大图等比缩放至 2560px、BMP 自动转 PNG、按 EXIF 自动转正、GIF 保持原样)
  • 图片秒传 (前端 SparkMD5 分块计算 md5 预检 check.php,服务端 md5 去重,秒级返回已有图片地址)
  • 今日图片
  • 用户中心 (注册/登录/注销,我的图片管理,上传自动归属)
  • 上传限速/匿名删除链接/WebP转存/粘贴与全页拖拽上传/跟随系统暗色/磁盘统计与孤儿清理/内容审核UI/操作审计/API令牌与开放文档
  • 管理员 (登录/注销、登录限速、上传日志分页搜索、图片删除与恢复、网站设置、修改密码)
  • SQLite 存储 (单文件免安装,首次运行自动建表,已移除 MySQL 依赖)
  • 数据三级保留 (在线默认 7 天 → 归档压缩备份 data/archive/yyyymmdd.csv.gz 默认 180 天 → 到期自动删除)
  • 活跃日历 (GitHub contributions 风格的每日上传统计墙,颜色跟随站点皮肤)
  • 两步验证 (账号 + 密码 + TOTP 动态码,兼容 Google Authenticator 等)
  • 皮肤系统 (明亮/暗黑 + 自定义强调色,管理员设站点默认值,访客本地记忆切换)

使用帮助(与首页帮助区一致)

怎么上传: 点击「Browse」选择 / 拖拽图片到页面任意位置 / 截图后 Ctrl+V 粘贴;完成后自动生成 URL/HTML/BBCode/Markdown/删除链接五种格式,相同文件自动秒传。

图片限制: 单张 ≤5MB、一次 ≤10 张;格式 jpg/png/gif/bmp/webp(gif 保动图,其余自动压缩转 WebP);最长边超 2560px 自动等比缩放;按 EXIF 自动转正;每 IP 每小时限上传(默认 60 次,后台可调)。

保存有效期: 图片外链长期有效(文件不自动删除);上传记录在线保留默认 7 天,超期转入压缩归档备份保留 180 天(后台可调);违规图片随时删除,上传者也可用删除链接自主删除。

API/第三方接入: 标准 HTTP 上传接口见 api.php 文档页;已可接入 PicGo(custom web-uploader 插件)、uTools 及任何支持自定义 Web 上传的工具;开启接口令牌后需携带 api_token 或 X-API-Token 头。

禁止内容: 色情/暴力/恐怖血腥、侵权、违规二维码、违反法律法规的图片,详见服务条款。

本地测试

Windows 下双击 dev.bat(或命令行运行)即自动启动 PHP 内置服务器并打开浏览器;加参数 --no-browser 不打开浏览器。中文提示为 GBK 编码,适配中文 Windows 的 cmd。

PHP 版本安全告警

本机开发环境 PHP 8.2.9 发布于 2023-08,晚于其后的多个安全修复未包含:

  • CVE-2024-4577 / CVE-2024-5458 / CVE-2024-5585(Windows php-cgi 参数注入,曾在野利用):仅在 Windows + php-cgi 部署时可利用。本项目 dev.bat 使用内置服务器(php -S),不受影响;切勿把本项目部署在 Windows php-cgi 下,或升级 PHP ≥ 8.2.20。
  • CVE-2025-5068 等过滤器/流相关修复:升级到 8.2 最新(≥8.2.28)或 8.3+ 即可覆盖。
  • 2026 年新披露的 FPM/SOAP/OpenSSL/streams 相关 CVE(见 php.net ChangeLog)同样随新版修复。

生产部署建议:Linux + PHP ≥ 8.2.28(或 8.3/8.4 最新),mod_php 或 fpm 均可。 Smarty 3.1.32 的已知 CVE(如 CVE-2021-26120)要求攻击者可控模板内容才可利用,本项目模板全部为受信文件且输出转义,不受影响;可升级 Smarty ≥ 3.1.39 根治。

Backblaze B2 云存储同步

可选能力:定时(随归档任务每6小时)把图片上传到 B2 备份,文件路径与本站一致(如 i/2610/10/xxx.webp),绑定 B2 自定义域名后可作为镜像 CDN 使用。

  • 后台「网站设置 → B2 云存储同步」填写 Key ID / App Key / 存储桶ID(「测试连接」会自动列出账号下所有桶及ID)
  • 支持删除同步(本站删除的图片同步删除 B2 副本,可关闭)、每轮同步数量限制、自定义域名展示
  • 仪表盘显示:已同步张数与体积、待同步数量、累计上传/删除、最近同步时间、最近错误
  • 手动触发:仪表盘「立即同步」;自动触发:cron 接口(同归档)
  • 凭据只存服务端配置文件(不随 git 提交);授权令牌缓存 23 小时

WebDAV 云存储同步

适配标准 WebDAV 服务(如日本免费空间),与 B2 同步并列、可同时启用:

  • 后台「网站设置 → WebDAV 云存储同步」填写目录地址/用户名/密码,「测试连接」用 PROPFIND 探测目录可用性
  • 按本站路径结构 PUT 上传(自动 MKCOL 建目录),支持删除同步(可关)、每轮数量限制、对外域名展示
  • 统计:已同步张数/体积、待同步、累计上传/删除、最近同步与错误;仪表盘与设置页展示
  • 触发:随归档任务每6小时自动 / 仪表盘「立即同步」/ cron 接口
  • 凭据只存服务端配置(不随 git 提交);HTTPS 使用随项目附带的 CA 证书包

安装

  1. 需要 PHP 8.x,启用 pdo_sqlite / gd / zlib / openssl / curl 扩展
  2. 上传全部文件,确保 data/、i/、system/ 目录可写
  3. 首次运行自动创建 data/1mg.sqlite 并建表
  4. 前台用户可注册账号,上传自动归属,在「用户中心」管理自己的图片
  5. 默认管理员账号 admin / admin123456,登录后台 admin/login.php 后请立即:
    • 修改密码
    • 在「网站设置 → 两步验证」绑定验证器

数据保留策略

层级 位置 默认保留 说明
在线 data/1mg.sqlite 主库 imginfo 表 7 天 超期记录自动归档
归档 data/archive/yyyymmdd.csv.gz 180 天 CSV+gzip 按天压缩备份,后台可下载
清理 — — 超过归档保留期的备份文件自动删除
  • 归档只搬数据库记录,图片文件本身不受影响(不破坏外链)
  • 触发方式: 后台仪表盘 6 小时自动执行一次 / 「立即归档〠7992 �按钮 / cron 接口 admin/archive.php?type=cron&who=鉴黄口令
  • 每日上传统计独立保存在 stats_daily 表,不随保留策略清理(活跃日历长期可看)

皮肤系统

  • CSS 变量驱动:view/site.css 顶部设计令牌,html[data-skin="dark"] 覆盖为暗色
  • 后台「网站设置 → 界面皮肤」设置站点默认皮肤与强调色(写入 system/config.user.json)
  • 访客点击页面右上角月亮/太阳按钮切换,选择存 localStorage,优先于站点默认值

安全说明

  • 后台所有页面需要登录,写操作全部校验 CSRF token;登录失败 5 次锁定 10 分钟
  • 两步验证密钥加密存储;登录为 账号+密码+动态码 两步流程
  • 上传文件校验:大小、扩展名白名单、getimagesize MIME、图片内容 webshell 特征扫描
  • JPEG/PNG/BMP 落盘前经 GD 重编码,剥离夹杂在图片中的恶意代码
  • i/.htaccess 禁止图片目录执行脚本;data/.htaccess 禁止访问数据库与归档
  • 数据库操作统一走 Medoo 参数化查询;后台模板输出全部转义,防 SQL 注入与 XSS
  • 生产环境关闭错误回显;后台设置保存在 system/config.user.json(不写 PHP 文件,避免代码注入)

PHP 8 兼容性说明

依赖的 Medoo 1.5.7 与 Smarty 3.1.32 发布早于 PHP 8,vendor 内已打最小补丁:

  • vendor/catfan/medoo/src/Medoo.php: 修复 10 处 implode() 参数顺序(PHP 8.0 起移除旧写法)
  • vendor/smarty/.../smartycompilerexception.php: 移除与 Exception::$line 冲突的属性声明
  • vendor/smarty/.../smarty_internal_templatecompilerbase.php: 不再直接写 $e->line(行号已在错误消息中)

若执行 composer update 升级依赖,以上补丁会被覆盖,请改用 medoo >= 1.7 / smarty >= 3.1.42。

本地化说明

所有第三方 JS/CSS(jQuery、SparkMD5、qrcodejs、bootstrap-fileinput)均已本地化到 view/ 目录,页面零外部请求,内网/离线环境可正常使用。

功能清单(完整)

上传: 压缩(WebP/参数可配) · 秒传(点击时预检) · 粘贴/拖拽/点击三种方式 · 上传限速 · 用户配额 · 可选文件有效期(TTL) · 可选水印 · 匿名删除链接 数据: SQLite 自动建表 · 三级保留(在线7天→归档180天→清理) · 图片回收站(可恢复,天数可配) · 归档导入恢复 · 数据库一键备份 · 孤儿文件清理 管理: OTP 两步验证+备份码 · 内容审核(多Key池,日500/月2500轮询) · IP 黑名单 · 操作审计 · 批量管理(筛选+多选删除) · 磁盘统计 · 多 API 令牌 界面: 明暗皮肤+强调色(跟随系统) · 图片详情/分享页(二维码) · 活跃日历 · 用户中心 · 全资源本地化 运维: /health 健康检查 · cron 归档接口 · dev.bat 本地测试

借鉴参考

About

1mg 图床

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

0