java web中Filter防盗链学习笔记

本文介绍了一个简单的防盗链Filter实现过程,通过分析页面间的链接关系,使用JSP获取referer头信息来判断请求来源是否合法。

【备注】知识点很简单主要是想尝试下markdown

目录

防盗链Filter

网站A中有一资源,其地址为URL,要保证只有本网站的页面通过下载链接才能下载。其他网站链接该URL或是直接访问均不能获取该资源。

实验过程

现有页面
  • getHeader_referer.jsp
  • getHeader_referer1.jsp
  • getHeader_referer2.jsp
页面主要内容
  • getHeader_referer.jsp
<%
    String str=request.getHeader("referer");
    String serverName=request.getServerName();
%>
<%=str %>
<%=serverName %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>original page</title>
</head>
<body>
<br>
this is original page.<br>
<a href="getHeader_referer1.jsp">page1</a>
</body>
</html>
  • getHeader_referer1.jsp
<%
    String str=request.getHeader("referer");
    String serverName=request.getServerName();
%>
<%=str %>
<%=serverName %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>page 1</title>
</head>
<body>
<br>
this is original page.<br>
<a href="getHeader_referer2.jsp">page2</a>
</body>
</html>
  • getHeader_referer2.jsp
<%
    String str=request.getHeader("referer");
    String serverName=request.getServerName();
%>
<%=str %> 
<%=serverName %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<br>
this is page 1.<br>
<a href="getHeader_referer.jsp">origin page</a>
</body>
</html>
页面关系

实验过程中页面间会有如下链接关系:0

Created with Raphaël 2.1.0 getHeader_referer.jsp getHeader_referer.jsp getHeader_referer1.jsp getHeader_referer1.jsp getHeader_referer2.jsp getHeader_referer2.jsp 通过page1链接跳转 通过page2链接跳转 跳转最初页面 通过origin page链接跳转
执行过程
  • 访问origin page
    origin page
  • 点击page1链接
    page1页面
  • 点击page2链接
    page2页面
  • 点击origin page链接
    origin page页面

    分析过程

    <%=str %> //输出request.getHeader("referer")值—页面跳转前的页面
    <%=serverName %> //服务器名

    当直接访问某url时,str为null.
    通过链接访问时则会打印跳转前页面url—本页面的参考页面。因此,当资源请求时,利用Filter先获取来源地址url,【1】直接访问为url=null 【2】网站链接访问资源时url=来源地址,当来源地址中不包含本站serverName,即资源请求从非本站发出。*【1】【2】均为非法不允许访问,可以直接导向错误页面资源。*

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值