如何确认访问请求100%来自QR code(二维码)扫描?
QR码扫描来源校验可行方案
QR码本质是纯文本的可视化编码载体,本身不存在隐藏的自定义元数据字段,所有存储在QR码内的内容扫码时都会完全暴露给用户,也无法强制要求通用扫码工具(系统相机、微信/支付宝扫码等)在发起请求时添加自定义请求头,因此无法100%完全杜绝用户复制链接访问的行为,但可以通过以下方案大幅提高盗用门槛,基本实现实际场景下的来源校验:
- 一次性时效令牌方案
生成QR码时,为每个二维码生成全局唯一、带过期时间、仅可使用一次的token,将token拼接在URL参数中,例如example.com/?qr_token=ajd82nfls92。后端存储所有有效token的状态,收到请求时先校验token是否在有效期内、是否未被使用,校验通过后立即将该token标记为失效。即使用户复制了URL,要么token已经过期,要么已经被使用过,无法二次访问。你用Python的qrcode库生成时,直接把带token的完整URL作为内容生成即可,无需额外修改生成逻辑。 - 自有客户端自定义请求头校验
如果是你自己开发的APP/小程序负责扫码,可以在扫码逻辑中增加自定义请求头,例如添加X-QR-Scanned: 1甚至携带客户端签名信息,后端校验请求头是否符合规则即可。这种方案下用户即使复制了URL,没有正确的请求头也无法通过校验,但仅适用于扫码工具可控的场景,通用扫码工具不支持该逻辑。 - 短链+异常访问拦截
可以为每个QR码生成唯一的短链,后端统计每个短链的访问设备指纹、IP、访问频次,如果出现同一短链多设备访问、短时间高频访问等异常行为直接拦截,适合不需要严格一次性校验的场景。
内容的提问来源于stack exchange,提问作者Caio César P. Ricciuti
相关产品推荐
相关产品推荐

