利用Referer请求头阻止"盗链"

有一些站点自己没有提供下载空间,但是为了吸引人气和提高站点的访问量,他们也提供了各种软件的下载页面,并让下载的超链接指向其他站点上的资源。另外一些真正提供了下载空间的站点为了防止这种“盗链”,需要检查请求的来路,只接受本站内的页面链接进来的下载请求,而阻止其他站点的页面链接进来的下载请求。要实现这样的功能,就需要检查请求消息的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文件存放在了<tomcat的安装目录>/webapps/it315/WEB-INF/classes目录中。

(2)在<tomcat的安装目录>/webapps/it315/WEB-INF/web.xml文件中注册该Servlet,并设置其映射URL。在web.xml文件中的相应位置处增加如下两段内容:

       <servlet>

              <servlet-name>DownManagerServlet</servlet-name>

              <servlet-class>DownManagerServlet</servlet-class>

       </servlet>

       ……

       <servlet-mapping>

              <servlet-name>DownManagerServlet</servlet-name>

              <url-pattern>/servlet/DownManagerServlet</url-pattern>

       </servlet-mapping>

保存web.xml文件后,重新启动Tomcat。

(3)在<tomcat的安装目录>/webapps/it315目录中编写一个名称为down.html的网页文件,内容如下:

<base href="http://localhost:8080/it315/down.html" />

<a href="servlet/DownManagerServlet">down</a>

接着在浏览器地址栏中输入如下地址:

       http://localhost:8080/it315/servlet/DownManagerServlet

由于这是直接在浏览器地址栏中输入的访问地址,请求消息中不含Referer请求头,DownManagerServlet将down.html页面转发给浏览器,浏览器中显示的结果如图6.4所示。

 

图6.4                                               图6.5

单击图6.4中的超链接再次访问DownManagerServlet,由于这时的请求消息中包含有Referer请求头且其值与DownManagerServlet位于同一WEB站点,DownManagerServlet接受下载请求,浏览器中显示的结果如图6.5所示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值