配信環境って自分はてっきり回線的な、通信速度的なもんと思ってましたが、まさか板から机作ってたとか...あらためて加藤小夏さんの偉大さに、あたしゃガツンと衝撃を喰らいましたよ。
っておもわずつぶやいたのであった。 #加藤小夏
原文 #加藤小夏
''
Skip to main content
alg 字段,然后以此决定验证方式。攻击者只需要把 header 里的 alg 从 RS256 改成 HS256,再用自己的公钥作为 HMAC 密钥对 payload 签名,服务器就会用公钥做 HMAC 验证——而公钥是公开的。一瞬间,非对称签名的安全假设被绕过了,攻击者可以用任意 payload 伪造合法 token。2015 年这个漏洞同时出现在至少五个主流 JWT 库里,包括 node-jws、ruby-jwt 和 python-jose。根本原因不是密码学出了问题,而是实现把"算法选择权"交给了不受信任的输入。修复方式很直接:验证时硬编码期望的算法,拒绝从 token header 动态读取。换句话说,。这个教训不仅适用于 JWT——任何安全协议里,如果验证逻辑依赖攻击者可控的元数据,类似的混淆攻击就必然存在。container_of 宏:从指针倒推回结构体container_of。它做的事情乍看像黑魔法:给你一个成员变量的指针,你就能拿回整个结构体的指针。听起来像是 C 语言在偷偷搞反射?container_of 就是把这个减法封装成了一句宏。内核里到处是链表嵌入在各自的结构体中——list_head 自己不承载数据,它被嵌进 task_struct、inode、sk_buff 等各种结构体里。遍历链表时你拿到的全是 list_head *,要从它找回外层的 task_struct,只能靠 container_of。next 和 prev 指针。泛型不是靠模板、不是靠虚函数,而是靠把数据结构的所有权翻转过来实现的。这种内嵌式链表在内核里无处不在,从进程调度到内存管理到文件系统,全靠这一套。((size_t)&((type *)0)->member)——把零地址强转成结构体指针再取成员地址,得到的值恰好就是偏移量,因为这个"结构体"从地址零开始。offsetofoffsetofoffsetof。container_of(ptr, struct task_struct, run_list) 这种写法,就知道那不过是一次指针减法,背后藏着的是内核对数据结构关系的根本态度:谁包含谁,决定了代码怎么组织。