基本思路是:服务器用一个servlet 捕获请求。用request.getHeader("referer");获取referer字段信息。如果referer不为空,且值是该网站站点。则允许下载并下载相应的文件。如果不符合,则显示提示信息。
但现在问题是:如果我直接在浏览器输入一个url。该url对应web服务器下的一个文件。为了防止盗链,该请求会被上面的servlet捕获到。按照防盗链的原理。该请求将不被接受。实际也是如此。
但有中情况例外,就是客户端有安装迅雷软件时,该软件会提示下载信息。并可以下载该文件。而且请求头中的referer信息也不是为null。
修改服务器端的程序,让它就算是referer值符合要求也不要提供下载。只是简单的提示一下信息。但迅雷还是会根据url的地址去找到该文件,并下载。
请问为什么会这样?

解决方案 »

  1.   

    是不是因为有别的用户下载过这个文件,迅雷把这个用户的信息收集起来,别人下载的时候迅雷就把这个信息给他还有一种可能,Referer是可以伪造的,迅雷可能默认用网站的域名作为Referer,如果Referer没有的话
      

  2.   

    “是不是因为有别的用户下载过这个文件,迅雷把这个用户的信息收集起来,别人下载的时候迅雷就把这个信息给他”这个可能性很低。我把迅雷卸载了重装。在第一次访问时该文件时,迅雷还是会自动启动,并出现下载提示。我确定迅雷伪造了Referer字段。因为我在捕获url的servlet中打印出Referer的值。在迅雷提示下载时,我点取消。
    打印的Referer值是null,程序运行也正常。提示"请先登陆网站后再下载“。
    但如果我点击的是“下载”时,获取的Referer居然是我的网站的url。http://localhost:8080/web工程名/.. 这样
    的url。
    而且就算我在servlet程序中无提供下载文件的代码,他还是可以找到要下载的文件。
      

  3.   

    伪造是肯定要的……我还在查找怎么帮迅雷填写Refer呢……