IM.codes安全设计全解:从Passkey认证、CSRF防护到Pod-Sticky路由的8道防线

发布时间:2026/10/23 1:45:25
IM.codes安全设计全解:从Passkey认证、CSRF防护到Pod-Sticky路由的8道防线
【免费下载链接】imcodesThe IM for agents. Shared Agent Context Memory, supervised execution, and cross-agent audit across AI providers.项目地址https://gitcode.com/gh_mirrors/im/imcodes点击查看免费下载IM.codesThe IM for agents是一个面向 AI Agent 的即时通讯服务提供共享 Agent 上下文与记忆、监督执行和跨 Agent 提供商审计能力。作为承载敏感会话与凭据的服务器它的安全架构值得拆解从 Passkey 无密码登录、CSRF 双重提交防护、登录锁定到多副本部署下的 Pod-Sticky 路由IM.codes 一共布下了 8 道防线。本文带你用非专业视角看懂每一道防线在防什么、怎么防。第一道防线Passkey 无密码登录 ️传统账号密码是撞库和钓鱼的重灾区。IM.codes 支持基于 WebAuthn 标准的 Passkey通行密钥登录浏览器或手机用指纹、Face ID 完成挑战-响应认证密码从头到尾不出现在网络上。认证流程基于simplewebauthn/server实现注册和认证挑战存储在数据库auth_nonces表中的 nonce 仅有 60 秒有效期一次性、防重放rpId和期望 Origin 从请求实际访问的主机名动态推导而不是写死配置避免在 A 域名注册、被 B 域名利用的跨域攻击所有 Passkey 端点强制Cache-Control: no-store杜绝中间缓存截获认证响应。相关实现见 passkey-auth.ts。第二道防线HttpOnly Cookie 刷新令牌轮换 登录成功后IM.codes 下发三枚职责分明的 Cookie命名统一维护在 cookie-names.tsCookie特性作用rcc_sessionHttpOnly Secure承载 4 小时有效期的 JWT 访问令牌JS 读不到rcc_refreshHttpOnly Secure30 天刷新令牌只用于换新访问令牌rcc_csrf可被 JS 读取专供第三道防线使用的 CSRF 令牌刷新令牌采用单次使用 轮换策略每次调用POST /api/auth/refresh后旧令牌立即作废并签发新令牌对被盗用的旧令牌无法二次使用见 auth.ts。同时刷新接口会校验账号状态——被管理员禁用的账号其旧令牌也无法续命。第三道防线CSRF 双重提交防护 ️浏览器带着 Cookie 访问第三方网站时恶意页面可能诱导浏览器夹带你的会话发起请求这就是 CSRF 攻击。IM.codes 的 csrf.ts 采用经典的双重提交double-submit模式且做了不少加固细节Origin 精确匹配不是简单的前缀匹配而是将 Origin 归一化为协议主机后与白名单逐字符比对专门堵死https://app.example.com.evil.tld这类子域前缀绕过令牌一致性校验请求头X-CSRF-Token必须与rcc_csrfCookie 完全一致否则直接返回csrf_rejected合理豁免GET/HEAD/OPTIONS 等安全方法、Passkey 端点挑战-响应机制本身比 CSRF 更强、登出和登录接口不豁免会导致用户卡在无法退出的坏会话走白名单跳过。第四道防线scrypt 哈希与 AES-256-GCM 加密 密钥与敏感数据怎么存crypto.ts 给出答案密码哈希使用 scrypt 算法 32 字节随机盐输出 64 字节派生密钥且用常量时间比较timingSafeEqual防时序侧信道攻击敏感配置加密Bot 配置等敏感数据用 AES-256-GCM 认证加密密文布局为iv(12) || ciphertext || authTag(16)任何一位被篡改都会解密失败JWT 签名HS256 HMAC-SHA256 签名验签同样是常量时间比较并严格校验exp过期时间。第五道防线登录锁定与速率限制 ⏱️暴破攻击最怕锁门。lockout.ts 的规则很简单粗暴同一 IP 或同一身份 15 分钟内失败 5 次直接锁定 15 分钟。关键设计锁定状态存在 PostgreSQL 的auth_lockout表里而不是内存多实例部署时所有副本共享同一个黑名单。刷新令牌接口同样套用 IP 用户双重锁定检查返回 429 和retryAfterMs。另外 rate-limiter.ts 提供滑动窗口限流并跟踪 WebSocket 票据JTI的一次性消费防止票据被重放。第六道防线重放防护与幂等性 截获一个合法请求并原样重发是内网攻击的经典手段。replay.ts 从三个层面设防时间戳窗口内部 daemon ↔ server 调用必须携带X-Deck-Timestamp与服务器时间偏差超过 5 分钟直接拒绝幂等键状态变更操作可携带Idempotency-Key相同键重复提交直接返回首次缓存的响应记录保留 24 小时后由定时任务清理平台 Webhook 原生签名Discord 用 Ed25519 时间戳签名飞书用 SHA-256含时间戳与 nonceTelegram 用 secret token——只认官方签名第三方伪造无效。第七道防线角色权限矩阵 审计日志 谁能干什么authorization.ts 定义了一张清晰的角色权限矩阵owner → 读 / 写 / 管理 / 所有者操作 admin → 读 / 写 / 管理 member → 读 / 写 unauthenticated → 无权限更精细的地方在于受控节点controlled node凭证默认拒绝一切普通 REST API 调用只能到达其被允许的最小接口面——默认拒绝是安全设计里最重要的四个字母。同时多标签页切换账号导致的身份漂移也会被X-Expected-User-Id校验拦截返回 409防止A 账号的标签页偷偷操作 B 账号。所有状态变更请求POST/PUT/DELETE由 audit.ts 自动写入audit_log表记录操作者、服务器 ID、动作、来源 IP 与客户端平台版本保留 90 天——出了问题可以追溯是谁、在什么客户端、对哪台机器做了什么。第八道防线Pod-Sticky 路由 ️最后一道防线关乎架构。IM.codes 服务器以多副本多 Pod方式运行每个 daemon用户本机的守护进程通过 WebSocket 连接到其中一个 Pod。问题来了下载令牌、WsBridge 实例、终端流等状态都只存在于单个 Pod 的内存里。解决办法是 Pod-Sticky 路由约定任何依赖 daemon 的请求必须携带serverId查询参数?serverId或路径参数/api/server/:serverId/...入口网关据此把请求精确路由到持有该 daemon WebSocket 的那个 Pod挂载逻辑见 index.ts路由约定见 CLAUDE.md。从安全角度看这道防线的价值在于状态隔离A 用户的请求绝不可能飘到另一个 Pod 上摸到别人内存里的会话状态、下载票据或终端流——路由本身就成了访问控制的一部分。总结8 道防线一张表 ✅#防线抵御的威胁核心源码1Passkey 认证撞库、钓鱼、密码泄露passkey-auth.ts2HttpOnly Cookie 令牌轮换XSS 窃取会话、令牌重放auth.ts3CSRF 双重提交 Origin 精确校验跨站请求伪造csrf.ts4scrypt 哈希 AES-256-GCM时序攻击、数据篡改crypto.ts5登录锁定 滑动窗口限流暴力破解、凭据喷洒lockout.ts6时间戳窗口 幂等键 Webhook 签名请求重放、伪签名replay.ts7RBAC 权限矩阵 审计日志越权操作、内部滥用authorization.ts / audit.ts8Pod-Sticky 路由跨 Pod 内存状态越界index.ts从认证入口到路由层IM.codes 的安全设计遵循一个朴素原则每一层都假设上一层可能失守。无密码的 Passkey 减少了可泄露的凭据面即使 Cookie 被带出CSRF 校验、身份头校验、角色矩阵仍层层拦截即使内部调用被截获时间戳窗口和签名校验会让重放失效而多副本架构下路由把每个用户的状态牢牢锁在它自己的 Pod 里。对于关注 Agent 协作安全的新手开发者来说这 8 道防线既是现成的参考样板也是一份可直接对号入座的 Web 安全清单。赞分享【免费下载链接】imcodesThe IM for agents. Shared Agent Context Memory, supervised execution, and cross-agent audit across AI providers.项目地址https://gitcode.com/gh_mirrors/im/imcodes点击查看免费下载相关推荐Tiny RDM Web版安全设计全解析认证、CSRF与CORS三层防护如何构建Tiny RDM Web版安全设计全解析认证、CSRF与CORS三层防护如何构建 Tiny RDM 除了桌面版外还提供可通过 Docker 快速部署的 Web桌面应用数据库客户端开发工具DRF认证系统保护API安全的第一道防线DRF认证系统保护API安全的第一道防线 本文深入探讨了Django REST framework的认证系统详细解析了BasicAuthentication后端Web框架Arnis 地图空白排查快速定位瓦片服务与 BBOX 问题Arnis 地图空白排查快速定位瓦片服务与 BBOX 问题 打开 Arnis地图区域一片灰白只有边框没有瓦片。这篇文章按排查成本从低到高帮你定位地图空桌面应用GIS游戏开发上一篇如何用PythonNumericalDemos实现蒙特卡洛模拟超详细步骤与实例演示下一篇Android Target Tooltip 项目常见问题解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考