Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42861
  • 博文数量: 7
  • 博客积分: 270
  • 博客等级: 入伍新兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-04 09:29
文章分类
文章存档

2012年(7)

分类: 系统运维

2012-07-22 20:53:30

有一些站点自己没有提供下载空间,但是为了吸引人气和提高站点的访问量,他们也提供了各种软件的下载页面,并让下载的超链接指向其他站点上的资源。另外一些真正提供了下载空间的站点为了防止这种“盗链”,需要检查请求的来路,只接受本站内的页面链接进来的下载请求,而阻止其他站点的页面链接进来的下载请求。要实现这样的功能,就需要检查请求消息的referer头字段是否与本站匹配。 

:动手体验:利用Referer请求头阻止“盗链” 

(1)按例程6-3编写一个名为DownManagerServlet的Servlet程序,这个Servlet程序负责提供下载内容,但它要求下载请求必须通过本站的下载页面链接进来,否则将请求转发给本站的下载说明页。 

例程6-3  DownManagerServlet.java 

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
public class DownManagerServlet extends HttpServlet 

       public void service(HttpServletRequest request, 
              HttpServletResponse response) throws ServletException, IOException 
       { 
              response.setContentType("text/html ;charset=gb2312"); 
              PrintWriter out = response.getWriter(); 
              String referrer = request.getHeader("referer"); 
              String sitePart = "http://" + request.getServerName(); 
              if(referrer!=null && referrer.startsWith(sitePart)) 
              { 
                     //处理正当的下载请求,这里只进行示意 
                     out.println("dealing download ..."); 
              } 
              else 
              { 
                     //非法下载请求跳转到本站的下载说明页 
                     RequestDispatcher rd = request.getRequestDispatcher("/down.html"); 
                     rd.forward(request,response); 
              } 
       } 


编译DownManagerServlet.java文件,确保编译后生成的class文件存放在了\webapps\it315\WEB-INF\classes目录中。 
(2)在\webapps\it315\WEB-INF\web.xml文件中注册该Servlet,并设置其映射URL。在web.xml文件中的相应位置处增加如下两段内容: 
        
              DownManagerServlet 
              DownManagerServlet 
        
       …… 
        
              DownManagerServlet 
              /servlet/DownManagerServlet 
        
保存web.xml文件后,重新启动Tomcat。 

(3)在\webapps\it315目录中编写一个名称为down.html的网页文件,内容如下: 
 
接着在浏览器地址栏中输入如下地址: 

      

由于这是直接在浏览器地址栏中输入的访问地址,请求消息中不含Referer请求头,DownManagerServlet将down.html页面转发给浏览器 
单击图6.4中的超链接再次访问DownManagerServlet,由于这时的请求消息中包含有Referer请求头且其值与DownManagerServlet位于同一WEB站点,DownManagerServlet接受下载请求。
阅读(2200) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~