Skip to content

Practice Security

ChangYo edited this page Oct 26, 2026 · 3 revisions

安全、隐私与合规

校园工具的凭据很值钱:一个 Token 可能能读邮件、成绩、一卡通流水;一个 Cookie 可能能发帖、发信。这页讲怎么存、怎么用、怎么删,以及各平台的边界。

相关:jAccount 与校园会话、选课社区、传承·交大、第二课堂、水源社区、交大云盘、课堂视频。

1. 凭据分级

凭据 例子 泄露后果 存放
OAuth client secret jAccount clientSecret、InfoPlus App secret 可冒充应用 服务端 Secret Store;不进前端/仓库
Access Token jAccount access token、Open API token 可读/写授权范围 内存或加密存储;短生命周期
Refresh Token jAccount refresh token 可长期换取新 token 加密存储;按密码级处理
邮箱密码 交大邮箱密码 可读全部邮件、发信 系统钥匙串/加密存储
User API Key 水源 key、选课社区 Key 可读写授权范围 加密存储;客户端负责撤销
站点令牌 第二课堂 Bearer、传承 Auth 可读写本人活动/资料,可能消耗积分 加密存储;按密码级处理
Cookie JAAuthCookie、_forum_session、_t 可冒充本人会话 持久 Session + 加密快照
签名 URL Canvas S3、课堂视频 MP4 短期可下载 不落盘、不日志、不缓存
SSH 私钥 HPC/jCloud 可登录服务器 ~/.ssh + agent;不进应用数据库

原则:凭据只存在需要它的进程里。桌面应用里,凭据放主进程/系统钥匙串,不暴露给渲染层、不写进 localStorage。

2. 存储

  • 系统钥匙串(macOS Keychain、Windows Credential Manager、Linux Secret Service)优先。
  • Electron 可用 safeStorage 加密后落盘;解密失败时保留原文件并提示重新配置,不要静默删除。
  • 密码/Token 不写进:
    • URL query
    • 前端源码/localStorage
    • Git 仓库/.env 提交
    • 日志/错误报告/分析系统
    • 模型上下文
  • 临时文件:下载到临时路径,校验后 rename;失败时清理。
  • 备份:如果导出配置,默认不带凭据;用户显式勾选也要二次确认。

3. 最小权限

  • OAuth:只申请当前功能需要的 scope;不要「一次申请全部」。
  • Open API:读写 scope 分开;能只读就只读。
  • 数据资源 API:只申请获批字段;不要缓存超出用途的数据。
  • Canvas:个人 Token 适合本人;做多用户应用要申请 Developer Key + OAuth,不要收集别人的 Personal Token。
  • 水源:能 read 就不 write;write 授权页明确写了「发布、编辑和删除内容」。
  • 选课社区:Key 默认可写;不要把它交给会自动点评、投票或改选课记录的流程。
  • 传承:下载会扣积分;只读浏览不要顺手触发下载或兑换。
  • 第二课堂:报名是写操作;只读列表足够时,不要保存报名能力。
  • 邮件:只读收件箱就能满足的场景,不要顺手拿发信权限。
  • 数据库:应用账号只给需要的库/表权限;不要用 root。

4. 会话与 Cookie

  • 校园会话放独立持久分区,不和普通浏览窗口混用。
  • 会话 Cookie 只在对应域使用;不要发给第三方域、模型、日志。
  • 请求重定向要小心:登录失效时可能被带到 jaccount.sjtu.edu.cn,不要把目标站点的 Cookie 带过去。
  • 跨域请求默认不带凭据;需要时用显式白名单。
  • 用户断开时:清 Cookie、清加密快照、调站点撤销(如果支持)。
  • 多账号:不同账号不同分区;切换时先清干净。

5. 写操作

写操作比读操作危险,因为它会改变真实世界。

  • 执行前展示:目标、内容、影响范围。
  • 高风险写操作(发信、提交表单、充值、卡务、签章)要二次确认;能用 TOTP 就做 step-up。
  • 点赞/收藏这类低风险操作可以批量,但要幂等。
  • 写超时不等于失败;先查状态,避免重复提交。
  • 不要在后台自动重放写请求。
  • 保留操作日志(脱敏),让用户能追溯。

6. 隐私与模型上下文

  • 邮件正文、私信、成绩、一卡通流水、流程表单、课堂内容都按私密数据处理。
  • 只把完成当前任务所需的最少数据发给模型;发送前让用户知道会发什么、发给哪个模型。
  • 默认不进入长期记忆/公开索引/共享数据集。
  • 自动摘要/ASR/OCR 可能出错;展示时标来源,并提供回到原文/原视频的链接。
  • 不把他人帖子、邮件、课堂录像、附件重新公开分发。
  • 日志脱敏:学号、姓名、邮箱、主题、正文、Token、Cookie、签名 URL 都要处理。

7. 各平台边界

平台 必须注意
jAccount 应用网址/回调要与申请一致;clientSecret 不进前端;不要用 password grant;登出只影响当前应用
Open API 按 scope 使用;不要用别人的 clientId;不要把 Token 放 URL 里分享
数据资源 API 只能用于申请时声明的用途和获批字段;不得直接或变形后提供给第三方 [官方]
InfoPlus User Token 代表用户,System Token 代表应用;不能互相替代;写流程要用户确认
Canvas 个人 Token 适合本人;多用户应用走 Developer Key + OAuth;课堂录像属于课堂视频平台,不在 Canvas 文件接口中
水源 非官方客户端/脚本/API/RSS 需事先书面许可;没有许可不要发布第三方客户端;不要批量抓取/重新分发
选课社区 学生自建;评分和点评不代表学校;Key 可写;不要批量点评、刷票或替他人发点评
传承·交大 资料由用户上传,版权在教师和上传者;下载扣积分;不要批量抓取或重新分发
第二课堂 只读活动;报名会改个人记录;联系人信息不采集、不写日志
课堂视频 只读;不要上报观看记录/伪造进度;不要重新分发录像
教学信息服务网 只读本人数据;不要自动选课/抢课;不要高频请求
Pan 官方没有公开第三方 API;社区私有 API 不稳定,可能违反条款;不要把 UserToken 交给模型
邮箱 不要自动群发;不要读他人邮箱;附件下载后注意保存位置
HPC/jCloud SSH 私钥/项目 Token 按密码级处理;不要共享账号;遵守集群使用规范

8. 日志与可观测性

推荐记录:

  • 平台、方法、路径(去掉 query 中的敏感参数)
  • 状态码、业务错误码、耗时
  • 重试次数、最终结果
  • 请求 ID(如果有)

不要记录:

  • Authorization、Cookie、User-Api-Key、client_secret
  • 签名 URL、verifier
  • 邮件正文、私信、成绩、表单字段
  • 完整响应体(除非脱敏)

错误上报前做一次 redaction;不要把整个 fetch 配置对象序列化。

9. 撤销与删除

  • 用户断开连接:清本地凭据 + 清缓存 + 调站点撤销。
  • 水源:POST /user-api-key/revoke;站点没有管理界面,客户端必须自己做。
  • 选课社区:删除 API Key(DELETE /api/api-key/{id})。
  • 第二课堂/传承:退出登录后重新取 token;服务端是否立即作废旧 token 未验证。
  • OAuth:撤销 refresh token/access token;清本地会话。
  • Canvas:删除 Personal Token(Canvas 设置里可以删)。
  • 邮箱:删除本地凭据;服务器密码改了就失效。
  • 数据:提供「清除本地缓存」;导出/备份默认脱敏。

10. 检查清单

  • 凭据在系统钥匙串/加密存储,不在前端/日志/Git。
  • 只申请了当前功能需要的 scope/字段。
  • 会话 Cookie 只在对应域使用,断开时清理。
  • 写操作有用户确认,超时不会自动重放。
  • 发给模型的数据是最小集,用户知情。
  • 日志脱敏,错误上报不含 Token/Cookie/正文。
  • 第三方内容不重新分发。
  • 水源/Pan 等有明确的合规说明。
  • 提供了撤销/删除路径。

11. 证据

  • 凭据加密、safeStorage、会话快照:[实测 2026-09,Dela src/main/credentials.ts、campus.ts]
  • 水源 ToS、key 撤销、CSRF:[官方/实测 2026-09]
  • 数据资源 API 用途限制:[官方 2026-10-25,graphql/overview.html]
  • Canvas 个人 Token vs Developer Key:[官方]
  • 课堂视频只读边界:[实测 2026-10-06]
  • 三站凭据形态与写操作边界:[实测 2026-10-26,只读]

变更记录

  • 2026-10-25:首版。合并凭据、会话、隐私、平台规则与检查清单。
  • 2026-10-26:补选课社区、传承·交大、第二课堂的凭据分级与平台边界。

Clone this wiki locally