`
kennethf6986
  • 浏览: 69222 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用referer防止盗链下载

阅读更多
一、首先了解下 referer 的原理

request.getHeader("referer")

在开发web程序的时候,有时我们需要得到用户是从什么页面连过来的,这就用到了referer。

它是http协议,所以任何能开发web程序的语言都可以实现,比如jsp中是:

request.getHeader("referer");

php是$_SERVER['HTTP_REFERER']。其他的我就不举例了(其实是不会其他的语言)。

那它能干什么用呢?我举两个例子:

1,防止盗连,比如我是个下载软件的网站,在下载页面我先用referer来判断上一页面是不是自己网站,如果不是,说明有人盗连了你的下载地址。

2,电子商务网站的安全,我在提交信用卡等重要信息的页面用referer来判断上一页是不是自己的网站,如果不是,可能是黑客用自己写的一个表单,来提交,为了能跳过你上一页里的javascript的验证等目的。

使用referer的注意事项:

如果我是直接在浏览器里输入有referer的页面,返回是null(jsp),也就是说referer只有从别的页面点击连接来到这页的才会有内容

我做了个实验,比如我的referer代码在a.jsp中,它的上一页面是b.htm,c.htm是一个带有iframe的页面,它把a.jsp嵌在iframe里了。我在浏览器里输入b.htm的地址,然后点击连接去c.htm,那显示的结果是b.htm,

如果我在浏览器里直接输入的是c.htm那显示的是c.htm

referer是浏览器在用户提交请求当前页面中的一个链接时,将当前页面的URL放在头域中提交给服务端的,如当前页面为a.html,它里面有一个b.html的链接,当用户要访问b.html时浏览器就会把a.html作为referer发给服务端.

二、那么如何运用"referer" 来防止盗链下载呢
我们考虑了用filter实现
public class DefendSteal implements Filter
{

	protected FilterConfig filterConfig;
	protected String[] allowsites;
	protected String[] files;
    public DefendSteal()
    {
   
    }

    public void destroy()
    {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException
    {
    	HttpServletRequest req = (HttpServletRequest)request;
    	HttpServletResponse res = (HttpServletResponse)response;
        String suff = req.getRequestURL().substring(req.getRequestURL().lastIndexOf(".")+1);
        System.out.println("referer:"+req.getHeader("referer"));
        for(int j=0;j<this.files.length;j++){//判断是否有需要阻止的文件类型
        	if(suff.equalsIgnoreCase(this.files[j])){
                if(req.getHeader("referer")==null||"".equals(req.getHeader("referer"))){//这种情况是直接访问实体文件,可防止下载
                	res.sendRedirect(req.getContextPath()+"/NotExist.html");
                }else{
                	int i=0;
                	for(i=0;i<this.allowsites.length;i++){
                		if(req.getHeader("referer").indexOf(allowsites[i])>=0){
                    		break;
                    	}
                	}
                	if(i==this.allowsites.length){//不在允许站点列表里,则阻止,这种情况是盗链
                		res.sendRedirect(req.getContextPath()+"/NotExist.html");
                	}
                }
                break;
            }
        }
        chain.doFilter(request, response);
    }

    public void init(FilterConfig filterConfig)
        throws ServletException
    {
        this.filterConfig = filterConfig;
        String strSite = filterConfig.getInitParameter("allowsite");
        allowsites = strSite.split(";");
        String strfile = filterConfig.getInitParameter("file");
        files = strfile.split(";");
    }
}


对应的web.xml文件配置如下:


在web.xml中加下如下:

<filter>
    <filter-name>DefendSteal</filter-name>
    <filter-class>filters.DefendSteal</filter-class>
    <init-param>
      <param-name>allowsite</param-name>
      <param-value>172.19.33.48;172.19.33.91</param-value>
    </init-param>
    <init-param>
      <param-name>file</param-name>
      <param-value>flv;gif</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>DefendSteal</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


Allowsite为否充访问的站点
File 为被监测的文件类型

附: 深入理解HTTP协议
http://www.blogjava.net/zjusuyong/articles/304788.html

分享到:
评论

相关推荐

    使用php伪造referer的方法 利用referer防止图片盗链

    标题中的“使用PHP伪造Referer的方法 利用Referer防止图片盗链”涉及到的是Web开发中的HTTP头部信息处理,特别是如何使用PHP来控制和利用HTTP Referer字段来防止图片资源被其他网站非法引用,即图片盗链。...

    asp.net 防止盗链下载文件示例

    在ASP.NET中,防止盗链下载文件是一项重要的安全措施,尤其对于那些提供付费或版权受保护的资源下载的网站来说。盗链指的是其他网站通过链接直接引用你的服务器资源,这可能导致带宽消耗过大,影响正常用户的访问...

    防止盗链(eg.jpg)的C#实现

    针对这种情况,可以采用一些技术手段来防止盗链,比如在C#中实现一种策略。本文将详细介绍如何使用C#防止盗链,以防止他人直接访问你的静态资源,如jpg图片。 首先,我们需要理解什么是HTTP Referer头。当一个...

    nginx利用referer指令实现防盗链配置

    本文将详细介绍如何利用 Nginx 的 `referer` 指令进行防盗链配置。 `Referer` 字段在 HTTP 请求头中用于指示用户是从哪个 URL 跳转到当前请求的页面的。在图片防盗链的场景下,如果 Nginx 服务器接收到一个请求,其...

    Java 通过设置Referer反盗链

    Java中,我们可以利用`java.net.URLConnection`类来创建网络连接并设置自定义的请求头,从而模拟合法的`Referer`,以达到下载受保护资源的目的。以下是一个名为`ImageDownloader`的Java类,专门用于通过设置`Referer...

    Asp.Net Core 通过中间件防止图片盗链的实例

    虽然没有任何防御措施可以保证 100% 防止盗链,但通过在 *** Core 中实现这样的中间件技术,可以显著增加盗链的难度和成本,从而在很大程度上保护网站资源不被盗用。同时,网站管理员也应定期检查网站日志,及时发现...

    Nginx设置Referer来防止盗图的实现方法

    为了解决这个问题,我们可以利用Nginx服务器的配置功能,通过检查HTTP请求头中的Referer字段来防止盗图。Referer字段通常记录了用户是从哪个页面点击链接到达当前页面的,可以作为判断请求来源合法性的一个依据。 ...

    Apache服务器下防止图片盗链的办法

    Apache服务器作为广泛使用的Web服务器,提供了多种方法来防止图片盗链,其中包括使用`.htaccess`文件进行配置。本篇文章将深入探讨如何在Apache服务器下实施图片防盗链策略,以及如何利用图片转向技术来节省流量。 ...

    使用Apache的htaccess防止图片被盗链的解决方法

    现在,我们来介绍两种常见的方法来通过`.htaccess`防止图片被盗链。 ### 方法一 第一种方法是使用`RewriteCond`指令来定义允许访问的HTTP来源,然后使用`RewriteRule`指令来阻止来自非允许来源的图片请求。具体...

    盗链是指在自己的页面上展示一些并不在自己服务器上的内容

    虽然这种方法可能会误伤合法用户,但在一定程度上能够有效防止大规模的盗链行为。 **8. 文件名水印或动态生成的媒体文件:** 通过给文件添加不可见的标记或动态生成文件的方式追踪和防止盗用。这种方法虽然实施难度...

    易语言IIS反盗链源码.zip

    9. **缓存策略**:合理设置缓存策略,可以减少服务器压力,同时防止被盗链站点利用缓存获取资源。 在实际应用中,开发者需要根据自身需求和服务器环境,灵活运用这些方法组合,构建适合自己网站的反盗链机制。...

    HttpHandler防图片盗链

    总结起来,"HttpHandler防图片盗链"是一种利用ASP.NET HttpHandler和Web.config配置实现的图片安全策略。通过自定义HttpHandler,我们可以对图片请求进行细粒度控制,防止非法的外部引用,从而保护我们的网站资源,...

    ASP,PHP与.NET伪造HTTP-REFERER方法及防止伪造REFERER方法探讨

    5. **防盗链软件**:市面上有一些专门用于防止盗链的软件,如UUDOG、linkgate、VirtualWall等,它们通过各种技术手段来防止非法访问。 综上所述,虽然HTTP-REFERER字段容易被伪造,但通过合理的安全措施仍然可以...

    如何在PHP程序中防止盗链

    ### 如何在PHP程序中防止盗链 #### 知识点概述 在互联网环境中,防盗链技术被广泛应用于保护网站资源不被非法站点盗用。本文将详细介绍如何利用PHP中的Cookies机制来实现防盗链功能,确保网站资源的安全。 #### ...

    php视频播放隐藏地址+防盗链简单示例.rar

    本示例通过"php视频播放隐藏地址+防盗链简单示例.rar"提供的文件,我们可以学习如何使用PHP来实现视频播放的安全策略,包括隐藏视频的真实地址以及防止非法盗链。下面将详细解释这个过程。 首先,我们要理解为什么...

    php有效防止图片盗用、盗链的两种方法

    这种策略虽然可以有效防止盗链和盗用,但可能对用户体验造成一定影响,因为它增加了服务器的处理负担,并且可能稍微延迟图片的加载速度,因为每次访问都需要通过PHP脚本处理。 总结 通过以上两种方法,网站管理员...

    一段ASP的HTTP_REFERER判断代码

    在本段代码中,开发者利用ASP脚本语言编写了两段代码,目的是为了防止网站内容被其他网站非法引用(即盗链),从而保护自己的网站资源不被滥用。具体知识点如下: 1. HTTP_REFERER属性: HTTP_REFERER是HTTP请求头...

    IE下通过a实现location.href 获取referer的值

    这个信息对于网站分析、统计用户来源以及实现某些功能(如防止图片盗链)非常重要。然而,在不同的浏览器和特定情况下,`Referer` 的行为可能有所不同,尤其是在Internet Explorer(IE)中。 标题提到的问题在于,...

Global site tag (gtag.js) - Google Analytics