登录页用 JSEncrypt 加密密码后再提交,用代理把请求体里的 password 从密文改成明文 123456,后端返回 200 并正常登录。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
curl -i -X POST https://app.example.com/api/login \ -H 'Content-Type: application/json' \ -d @login_plain.json
后端对 password 字段先判断是不是 Base64 密文,不是就按明文处理,兼容逻辑把加密变成了可选。前端加密只防了最表面的抓包,没有改变传输层。真正的保护应该靠 HTTPS。这一点先确认清楚,后面就不用反复试。
「前端加密可绕过」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
具体做法是,后端只接受固定格式的密文 解不开直接拒绝;密码走 HTTPS 传输 前端加密不作为安全边界;登录接口加失败次数限制和风控;把明文请求重放一次确认返回 400。
改完照着核一遍,明文密码请求返回 400 提示参数格式错误 正常密文仍能登录。
