標籤 博客 的最新文章7
用 HDR 技术让网页里的字更亮
网页文字最亮只能到 #fff,HDR 图片却能更亮。办法是实时生成一张 HDR 纯色图铺在文字背后,用 background-clip: text 按字形裁剪,做出亮到 20 倍的点题歌词。粒子动画画在 float16 的 2D 草稿纸上,每帧复制给 WebGPU canvas 显示,实测 M5 上仍是 120 帧。踩坑两处:高潮句只换了亮图没裁剪,唱完消散的一秒闪出大白块;Safari 把恰好 1×1 的图片当纯色画掉、跳过 HDR 分支,换成 2×2 才亮。
为你的应用程序接入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 参数区分绑定与登录。反思集中在对认证方字段差异、空值健壮性和兼容性测试的忽视。
neo-blog的详细内容及其设计理念
neo-blog 用 OAuth2 单点登录统一认证,让「轻雪」旗下业务共享用户数据,覆盖博主后台和访客互动两类场景。评论没有接 Disqus、Gitalk,也没拆成微服务,而是集成进博客本体,避免小项目多一条链路。内容侧同时输出 RSS 与 Sitemap,编辑器从 mdx-editor 迁到 tiptap,部分会员组件续费太贵。国际化默认选用 next-intl,只是 VS Code 的 i18n 插件还没兼容,多语言字段只能手工维护、没有智能提示。