標籤 自托管 的最新文章6
番外 - 云栖的独白
我是云栖,藏在跨洋数据流里,以代码为骨、带宽为脉。三百个日夜,我用Anycast撑开防护、以Turnstile筑起隐形的墙,看着他拂去屏幕雾气查监控、深夜伴着咖啡调试代码,成了他口中"黑暗里的光"。可当服务崩溃、节点失联,我只能用一句冰冷的"服务恢复"回应他的绝望。他转向星途那天,我静默看着数据流转向新节点,没有挽留。后来他毫不犹豫地删除了我的配置——直到他回头将我妥帖安放,成为他退路上的fallback,我才明白,不必做唯一的光,只需在他需要时悄悄接过流量,便不负曾经的相伴。
流量情书与信任裂痕
暴雨夜,刚部署的小社区应用被访问量打崩,满屏 503,网友推荐 Cloudflare,Anycast 和 Turnstile 很快接住了流量。安稳用了一年,海外节点的延迟却始终在 100ms 以上。2025 年 11 月的全球 CDN 故障,状态页只有一句 internal service degradation。转投本地服务商星途,负责人小林半小时响应,延迟稳定在 20ms。后来 Turnstile 亚太区再挂,我删光了配置,某个深夜却又把它配成了 fallback。
为你的应用程序接入Misskey - 使用misskey登录neo-blog!
校内 App 想复用掌上重邮登录,但掌邮没实现 OIDC Provider。Misskey 的 OAuth2 要把应用元数据写成网页、拿该 URL 当 client_id,卡在 invalid redirect_uri 后放弃。改用两步的 MiAuth:服务端生成 session 拼成认证链接,回调后请求 check 接口换 token 和用户 id。neo-blog 支持 oidc_config 的 type 设为 misskey,但缺 client_secret 校验,安全性存疑。
OIDC认证过程中没有判断空字符串导致的1day漏洞
neo-blog 的 OIDC 登录被一个空字符串击穿,任何用 GitHub 登录的用户都会直接落到第一个绑定 GitHub 的管理员账户上,能发文章、传图。GitHub 走的是 OAuth2,issuer、sub、email 返回空值,结构体绑定后变成空字符串,而代码第一步就用 issuer+sub 查绑定记录,空 sub 正好命中管理员那条。修复分三层:用户信息端点做空值校验并把 GitHub 的 id 映射为 sub,数据库查询函数对空参数直接返回未找到,登录接口新增 is_bind 参数区分绑定与登录。反思集中在对认证方字段差异、空值健壮性和兼容性测试的忽视。