验证链接只能使用一次,并不代表你知道是谁打开了它。

Charles Archibong, 联合创始人
一次性链接能限制重复使用,却无法单独证明使用者是谁。在服务器端将每次验证流程绑定到指定客户,并在授予账户权限前核对绑定关系。

要点
- 持有链接和拥有账户是两种不同的证据。
- 在后端创建并保存客户与会话的绑定关系。
- 改变账户权限前,核对权威结果及其客户绑定。
已完成的验证应属于服务器创建的指定客户和流程。改变账户权限前,必须将这一关系与权威结果核对。浏览器成功跳回页面,或有人持有一次性链接,都不够。
例如,客服人员把验证URL复制到了错误的对话。即使链接只能使用一次,你仍需要知道产生的证据可以影响哪个账户。
先建立绑定,再发送链接
在后端使用指定客户引用、组织、环境和工作流创建验证流程。发送URL之前,把返回的会话引用保存到这份申请中。
不要让浏览器提供的客户ID决定哪个账户获得验证。先确认请求者有权为该账户启动流程。
OWASP授权指南 (在新标签页中打开)建议每次请求都检查权限。创建验证流程和使用验证结果时,都应遵循这个原则。
把发送方式纳入控制
通过面向指定客户的渠道发送链接。不要在不需要完整链接的分析事件、截图或客服备注中保留验证URL。团队之间使用引用,而不是复制URL。
如果链接发给了错误的人,应在支持的情况下,使用提供商文档明确的撤销或过期控制。不要假设生成新链接就会使旧链接失效。如果无法确认剩余风险,应升级处理。
OWASP会话管理指南 (在新标签页中打开)解释了URL携带令牌时的注意事项。确认提供商的实际行为,不要自行推定保证。
在服务器端接受结果
结果到达时,验证真实性,并按需要读取当前状态。核对已保存的客户、流程和环境。在授予权限前,确认已达到政策要求的最终决定。
采集完成页面可以告诉客户下一步是什么,但不应独立批准账户。待处理、已审查和已完成状态必须各有明确含义。
测试错误接收者的路径
测试两个客户分别使用不同浏览器会话、链接被非指定客户打开、流程过期,以及结果延迟到达。确认任何结果都无法更新无关账户。
Toden支持绑定客户的托管流程;账户权限仍由你的应用执行。先阅读托管链接与SDK选择指南,再利用集成参考端到端验证绑定关系。
参考来源



