一个下载地址防盗的判断 大牛进来看下!
两个网站 一个主站 一个上传用的子站
主站的download.php 为下载页面
子站的down.php为下载链接
必须通过download.php的下载点击链接才能下载
为了防止用户直接访问 子站/down.php?fileid=1能下载到该文件 做了下面的判断
download.php 增加一个哈希值
$hash = strtoupper(md5('downloadkey'.date('ymdh')));
down.php 也增加一个哈希值
$hash2 = strtoupper(md5('downloadkey'.date('ymdh')));
down.php判断
if($hash<>$hash2){
header("Content-Type: text/html; charset=utf-8");
echo '文件ID: '.$file_id.'<br>';
echo '['.$file_name.'] 文件地址已过期,请返回下载地址重新下载。<br><br>如果仍然出现此问题,请联系管理员<br><br>';
if($pd_gid==1){
echo '<br><br>---------- 以下内容 管理员可见 ---------- <br>';
echo '文件HASH:<font color=blue>'.$hash.'</font><br><br><br>';
echo '文件HASH2:<font color=blue>'.$hash2.'</font><br>';
}
当时这样会有一个问题 就是当用户在20:59:59''的时候访问的下载页面,然后点击下载了
但是点击之后时间是21:00:01了,这样就造成了哈希值不一样,然后就不能下载,要返回重新下载一下就可以
如何解决呢。。
------解决方案--------------------生成的 $hash 宜通过 cookie 传递并设有不太长的有效期,同时保存于 session 中
检查时不重新生成,而只检查 cookie 中是否有,并且与 session 中的对比
就同校验码一样