INFO5995 Task 3 — Session Token Role Evidence 讲解
INFO5995 Task 3 — Session Token Role Evidence 讲解
代码是什么
private static final String KEY_SESSION_TOKEN = "sessionToken"; |
出处:Login.java,第 26-29 行。
逐行解释
| 代码 | 含义 |
|---|---|
KEY_SESSION_TOKEN = "sessionToken" |
后面存在手机里的 key 叫 "sessionToken" |
SESSION_PREF_NAME = "SessionPrefs" |
存储的文件名是 "SessionPrefs" |
SharedPreferences.Editor editor |
用来写入数据的工具 |
SharedPreferences sharedPreferences |
用来读取数据的工具 |
为什么这是证据
核心逻辑:
- 变量名叫
KEY_SESSION_TOKEN,明确说明这个值是 session token - 存在
SharedPreferences里——这是 Android 的本地持久化存储 - 结合后面
createSession()的逻辑:这个值是在登录成功后存入本地的
换个角度理解:App 怎么判断"已登录"?
方式 A:服务器 session(真实 App 常见)
- 用户登录 → 服务器返回一个 token → 存在内存 → 每次请求带上
- 服务器验证 token 是否合法
方式 B:本地 session(这个 Demo App 的做法)
- 用户登录成功 → App 在本地生成一个"身份证明"
- 下次打开 App → App 检查本地有没有这个"身份证明"
- 有就认为已登录,没有就回到登录页
这个 App 就是方式 B。
为什么 session token 是 security-sensitive
Session token 如果: - 可预测 → 攻击者可以伪造身份证明 → 冒充其他用户登录 - 不可预测 → 只有正常登录的用户才有 → 无法冒充
所以 session token 本身是身份凭证,它承担了安全敏感的角色。
这个漏洞的本质
漏洞链条: |
为什么这段代码是"证据"
不是因为它写了什么安全机制,而是因为它说明了一个安全敏感的操作:
这个 App 用一个本地生成的随机值来充当用户身份凭证,但这个随机值的生成算法是
java.util.Random(可预测的)。
证据链: 1.
KEY_SESSION_TOKEN = "sessionToken" → 这个值叫 session token
2. createSession() → 在登录成功后调用 3.
generateSessionToken() → 生成用的
java.util.Random
对作业的意义
这段代码回答了 Task 3 的一个关键问题:
这个漏洞涉及的是什么类型的安全敏感值?
答案:Session Token——它不是普通的随机数,而是代表了"已登录状态"的身份凭证。
这就是为什么 java.util.Random
在这里是真正的问题,而不只是"用了不安全的 API"这么简单。