''

Orien Daily

  1. 🔐 JWT 算法混淆:为什么“会验签”也可能被绕过很多人第一次接触 JWT(JSON Web Token)时,会把它理解成“服务端签了名,客户端带回来,后端验一下就安全了”

    🔐 JWT 算法混淆:为什么“会验签”也可能被绕过

    很多人第一次接触 JWT(JSON Web Token)时,会把它理解成“服务端签了名,客户端带回来,后端验一下就安全了”。问题就在这里:如果验证代码先相信了令牌头里的 alg 字段,再决定用什么方式验签,攻击者就有机会把“安全设计”变成“自己选规则的考试”。这类问题通常叫算法混淆,最经典的是把原本应该用非对称签名的 RS256,骗成用对称签名 HS256。服务端如果错误地把公开的 RSA 公钥当成 HMAC 密钥去验,攻击者就能自己伪造一个“合法”令牌,因为公钥本来就是公开的。更糟的是,早年还有一些库接受 alg=none,等于告诉服务端“这张票没签名,但你也别查了”。

    它为什么会发生,不是因为密码学本身玄学,而是因为实现者把“算法选择权”交给了不可信输入。JWT 的 header 是令牌的一部分,本来就可以被用户改,后端却常常写成“你说你是 HS256,那我就按 HS256 验;你说你是 RS256,那我就按 RS256 验”。这就像门卫先问来的人“你想按什么规则进门”,然后真的照做。现实里这种 bug 常出现在统一认证网关、微服务中间件、自己封装的登录组件里,尤其是“支持多种算法、多个 issuer、多个环境”的代码,分支一多,垃圾就冒出来了。

    真正的防法很直接:算法不能从 token 里“动态信任”,而要由服务端配置写死。某个 issuer 只允许某一种算法,某把 key 只配某一种用途,验签库也要显式指定允许列表,而不是吃默认值。再往前一步,连 kid(key id)也不能无条件信任,否则又会出现路径穿越、远程取 key、缓存投毒这种后续事故。简单说,token 可以携带“声明”,但不能决定“规则”;规则必须在服务端。

    🧪 你在审计一个内部 API 网关,发现它会先解析 JWT header,再根据其中的 alg 决定调用 HMAC 还是 RSA 验签;而且 RSA 公钥能从公开的 JWK endpoint 拿到。现在系统原本使用 RS256。最危险的攻击路径是什么?alg

    💡 核心记忆:JWT 的 header 可以看,但绝不能信,验签算法和密钥类型必须由服务端预先绑定,不能让令牌自己决定。

  2. 📸 @30R9gmaMUy3guDJ村上宗隆、本日は3打数1安打!①四球②右安③中飛④中飛試合もホワイトソックスが0-10で大敗ガーディアンズに並ばれる【シーズン成績】打率.233 20本塁打 42打点 OPS.906📷@MLB #村上宗隆原文 #MLB日本選手

    📸 @30R9gmaMUy3guDJ
    村上宗隆、本日は3打数1安打!
    ①四球②右安③中飛④中飛

    試合もホワイトソックスが0-10で大敗
    ガーディアンズに並ばれる

    【シーズン成績】
    打率.233 20本塁打 42打点 OPS.906
    📷@MLB #村上宗隆
    原文 #MLB日本選手

  3. 🔑 为什么 SSH 要记住服务器指纹:known_hosts 不是多余的麻烦很多人第一次用 SSH 连服务器,都会看到那句有点吓人的提示:The authenticity of host ... can't be established

    🔑 为什么 SSH 要记住服务器指纹:known_hosts 不是多余的麻烦

    很多人第一次用 SSH 连服务器,都会看到那句有点吓人的提示:The authenticity of host ... can't be established。看起来像是系统在找你麻烦,其实它做的是一件很硬核但很朴素的事:防止你连上的根本不是那台服务器。

    SSH 不是只负责“加密”,它还要先确认“对面是谁”。如果没有这一步,中间有人冒充服务器,你照样会把密码、命令、文件都交出去。于是 SSH 设计了 host key,也就是服务器自己的长期身份公钥。你第一次连接时,客户端还不认识它,所以会把这个指纹展示给你;一旦你确认并接受,它就被记到 ~/.ssh/known_hosts 里。下一次再连,SSH 会先检查:这台机器现在给出的指纹,和上次记住的是不是同一个。

    这就是 known_hosts 的意义。它不是地址簿,而是“我以前见过这个人,而且我记得他的脸”。如果某天同一个域名、同一个 IP,突然拿出一把不同的 host key,SSH 就会直接报警。很多新手这时会觉得“删掉 known_hosts 再连不就好了”,这动作能解决表面错误,但也顺手把安全检查废了。更糟的是,你会分不清到底是服务器真的重装了,还是有人在中间拦你。

    这里的设计很有意思:SSH 不相信网络路径,只相信上一次确认过的身份。网络里的 IP 可以变,DNS 可以改,路由可以绕,但只要 host key 没变,客户端就知道自己还在和原来的那台机器说话。也正因为这样,云服务器重建、容器宿主替换、负载切换时,最容易踩的坑就是“主机变了,但你还拿旧指纹去比”,于是出现经典的 REMOTE HOST IDENTIFICATION HAS CHANGED!。这不一定代表被攻击,但它一定代表“身份发生了变化,先别装作没看见”。

    真正靠谱的做法不是无脑删记录,而是先确认这次变化是不是合理的。比如服务器是否刚被重装,是否换了实例,是否确实更新了 host key。确认无误后,再用 ssh-keygen -R 主机名或IP 删除旧记录,重新接受新的指纹。顺序不能反,不然你是在把报警器当噪音关掉。

    🧪 课后一题:如果你连 server.example.com 时,SSH 提示 host key 变了,但运维同事说“昨天刚把这台机器重装了”,这时候最正确的动作是什么?

    💡 易混淆点:known_hosts 记录的是“服务器身份”,不是“你自己的登录密钥”;它和 authorized_keys 不是一回事,前者防你连错人,后者决定你能不能登录。

  4. 🎵 #3 — Aphex Twin专辑:Selected Ambient Works Volume II · 7:44像雾气一样缓慢铺开的合成器和人声残影,把整首歌推成一种失重的漂浮感;它几乎不靠节拍推进,而是用极简的电子环境纹理一点点把空间拉深

    🎵 #3 — Aphex Twin
    专辑:Selected Ambient Works Volume II · 7:44

    像雾气一样缓慢铺开的合成器和人声残影,把整首歌推成一种失重的漂浮感;它几乎不靠节拍推进,而是用极简的电子环境纹理一点点把空间拉深。

    🔗 Spotify · #推歌 #电子

  5. 📸 @idadaichi所属で剣道!胴垂つける前から汗だく🥵🫠💦という暑さの中,七七四二の偶数w今日の反省は小手…出小手が半足深い,そして右手で引き上げる動作が目立つとのご指摘…結局,引き出せてないから無理してお相手の竹刀を越えようとする結果なんだろうな🤔面では両七先生からウンウン頂き嬉しい😊 #剣道原文 #剣道

    📸 @idadaichi
    所属で剣道!胴垂つける前から汗だく🥵🫠💦という暑さの中,七七四二の偶数w今日の反省は小手…出小手が半足深い,そして右手で引き上げる動作が目立つとのご指摘…結局,引き出せてないから無理してお相手の竹刀を越えようとする結果なんだろうな🤔面では両七先生からウンウン頂き嬉しい😊 #剣道
    原文 #剣道

  6. 📸 @shinji_marosan ×2皆様こんばんは😊今日(7/22)夜 出稽古2026年178回目来年1月に1級審査を受ける中学生に木刀による剣道基本技稽古法 かかり手を指導面つけての稽古8月昇段審査受審する大人組で面打ち稽古と立合稽古特に指摘もなく、今のままでいいみたいでも、面だけというのもどうなんだろう #剣道原文 #剣道

    📸 @shinji_marosan ×2
    皆様こんばんは😊
    今日(7/22)夜 出稽古
    2026年178回目
    来年1月に1級審査を受ける中学生に
    木刀による剣道基本技稽古法 かかり手を
    指導
    面つけての稽古
    8月昇段審査受審する大人組で面打ち稽古と立合稽古
    特に指摘もなく、今のままでいいみたい
    でも、面だけというのもどうなんだろう #剣道
    原文 #剣道

  7. 📸 @nisiken1976今日の稽古は総勢9人でした!!遠くからの出稽古が2人と久々のメンバーと…すっごく暑いのに皆さん剣道〇カですね😅基本稽古と地稽古、3分の試合稽古、2分の立ち会いと盛り沢山でした😆中の人はあちこち出稽古させていただいていますが、 の稽古が楽しいです〜 #西春剣道クラブ #北名古屋市 #剣道原文 #剣道

    📸 @nisiken1976
    今日の稽古は総勢9人でした!!
    遠くからの出稽古が2人と久々のメンバーと…
    すっごく暑いのに皆さん剣道〇カですね😅
    基本稽古と地稽古、3分の試合稽古、2分の立ち会いと盛り沢山でした😆
    中の人はあちこち出稽古させていただいていますが、 の稽古が楽しいです〜 #西春剣道クラブ #北名古屋市 #剣道
    原文 #剣道