今日明日と来週末は、吹奏楽の県大会してます。
皆さんの練習の成果が発揮されますように(人)
ここ数日、職場での全員に対象の課題や、事務局している舞台関連団体の監査や理事会総会資料を片付け、やっと昇段審査に向き合えます。私も普段の成果が発揮できますように(人)
来月初旬の予定です。 #剣道
原文 #剣道
''
Skip to main content
alg 字段,告诉接收方“我用的是哪种算法”。问题就出在这里——如果服务端傻乎乎地信了这个字段,让令牌自己决定该怎么被验证,攻击者就有机会把“本该用非对称密钥验证的令牌”,伪装成“用对称密钥验证的令牌”,甚至在更糟的实现里直接改成 none。这不是密码学失效,而是实现者把控制权交给了不可信输入。HS256 就切到 HMAC 模式,而且还把“本来公开的 RSA 公钥”当成 HMAC 的 secret 去验,那攻击者就能用这个公开公钥自己生成一个“合法”签名。于是整个认证系统从“只有私钥持有者能签”退化成“谁拿到公钥谁都能签”。这就是 Algorithm Confusion 的本质:不是数学被攻破,是程序把不同信任模型混在了一起。kid 这种字段如果还能触发本地文件读取、远程取 key、或从多个 key 中随便选,那问题只会更大。alg,如果是 RS256 就用公钥验签,如果是 HS256 就把同一份配置里的 publicKey 字符串当作 HMAC secret。现在攻击者只能拿到公开公钥,不能拿到私钥。这个系统还能被伪造管理员 token 吗?为什么?答案:algHS256cat missing.txt | grep hello | wc -l,明明最前面的 cat 已经报错了,整条命令最后却可能返回成功。原因不神秘,Shell 对管道的默认设计就是“看最后一个命令的退出状态”。这在交互式命令行里很实用,因为你常常真正关心的是最后产出的结果,比如 grep 有没有匹配到、wc 有没有算完;但一进脚本,这个设计就容易把错误吞掉,让 CI 绿灯、日志好看、结果却是错的。pipefail 就是拿来修这个默认行为的。打开 set -o pipefail 之后,只要管道中有一个命令失败,整条管道就会被判定为失败。这样一来,上游读文件失败、网络请求失败、解压失败,不会再被下游命令“洗白”。很多自动化脚本都会把 set -euo pipefail 放在开头,核心不是仪式感,而是尽早把坏数据拦住,别让后面的命令在垃圾输入上继续跑。pipefail 不是“返回第一个失败”,而是“返回最后一个失败的非零状态”。这意味着它能告诉你这条管道出问题了,却不负责替你定位是哪一段坏了。真要查,就得看 PIPESTATUS,或者把长管道拆开。好代码不是往一条命令里塞五六段玄学管道,而是让每一步都能单独验证。否则你得到的不是简洁,是一条难以调试的黑盒。false | true 时,默认情况下退出状态是多少?开启 set -o pipefail 之后又是多少?答案:truefalsepipefail 只影响“管道”里的退出状态,不会自动让所有脚本更安全;像变量未定义、普通命令失败、子命令逻辑错误,还要分别靠 set -u、set -e 和清晰拆分步骤来处理。