>  기사  >  백엔드 개발  >  一个下载地址防盗的判断 大牛进来看下!

一个下载地址防盗的判断 大牛进来看下!

WBOY
WBOY원래의
2016-06-23 14:26:441002검색

两个网站  一个主站 一个上传用的子站

主站的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 中的对比

就同校验码一样

生成的 $hash 宜通过 cookie 传递并设有不太长的有效期,同时保存于 session 中
检查时不重新生成,而只检查 cookie 中是否有,并且与 session 中的对比

就同校验码一样

找到个简单点的方法

if(strpos($_SERVER['HTTP_REFERER'],'http://www.domain.com') == 0)
通过判断来路地址判断 不知道是否可行


生成的 $hash 宜通过 cookie 传递并设有不太长的有效期,同时保存于 session 中
检查时不重新生成,而只检查 cookie 中是否有,并且与 session 中的对比

就同校验码一样

找到个简单点的方法

if(strpos($_SERVER['HTTP_REFERER'],'http://www.domain.com') == 0)
通过判断来路地址判断 不知道是否可行
这个可以伪造

HTTP_REFERER 是可以伪造的

你可以参考下basic认证。

反过来,模拟浏览器也是一个课题。所以这是个道高一尺魔高一丈的问题。防盗只能防止正常的盗链,对于使用程序模拟浏览网页的话没法绝对防止。

所以建议防君子不防小人,使用referer防盗链。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.