带过期时间的PHP下载链接:如何识别下载请求来源?
针对你提到的场景,有几种实用方法可以辅助判断下载请求是目标用户本人点击,还是链接被分享后他人点击:
给链接添加用户专属绑定参数
扩展你的数据表,新增user_identifier字段(存储用户ID的哈希值、邮箱哈希等唯一标识)。发送邮件时,在下载链接中附加这个专属参数,比如:/download?id=fsdhfs7dfsniuf92un3f2&user_hash=abc123xyz当收到下载请求时,校验链接中的
user_hash和数据表中存储的对应值是否一致。如果不一致,即可判定为非目标用户点击。结合身份会话/一次性令牌验证
如果你的系统有用户登录机制,可以让邮件中的下载链接先引导用户完成登录,验证身份后再允许下载;或者在链接中嵌入一个与目标用户绑定的一次性令牌,令牌有效期和下载链接过期时间同步,请求下载时校验令牌的归属和有效性,只有匹配的用户才能触发下载。对比请求上下文特征
记录下载请求的IP地址、浏览器User-Agent等信息,同时在邮件发送后,通过邮件追踪像素(透明小图片)记录用户打开邮件时的上下文信息。当收到下载请求时,对比两组信息的匹配度:如果IP地区、设备类型高度吻合,大概率是本人点击;如果出现完全陌生的IP或设备特征,则可能是链接被分享。注意:这种方法是辅助判断,因为用户可能更换设备或网络,不能作为绝对依据。
限制单链接的有效点击次数
在数据表中新增click_count字段,默认值为0。每次下载请求成功后将计数加1,当计数超过设定阈值(比如1次)时,直接拒绝后续请求并标记链接为“已分享”。这种方法适用于仅允许用户本人下载一次的场景。
需要说明的是,没有100%绝对的检测方法——如果用户主动分享自己的账号或完整链接,以上手段可能失效,但能大幅提高非授权点击的检测准确率。
内容的提问来源于stack exchange,提问作者Toniq

