HTTP Referer(页面统计/资源防盗链)
简介
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站
用处
1.页面统计
2.资源防盗链
缺点
Referer是不安全的,客户端可以通过设置改变 Request中的值,尽量不要用来进行安全验证等方面。
空的情形
下默认情况下Referer可能出现为空的场景:
1、页面从https跳转到http,应该是处于安全考虑,该点在RFC-2616中有说明,主流浏览器均遵守这个规则,比如IE、FF;但默认情况下https到https是会发送Referer的。
2、直接在浏览器中输入目标URL。
3、由于FF提供了很强大的自定义参数设置功能,所以我们可以通过about:config页面修改以下两个选项的默认设置:network.http.sendRefererHeader
(default=2),设置Referer的发送方式,0为完全不发送,1为只在点击链接时发送,在访问页面中的图像什么的时候不发送,2为始终发送。network.http.sendSecureXSiteReferrer
(default=true),设置从一个Https访问到另外Https页面的时候是否发送Referer,true为发送,false为不发送。4、从收藏夹访问。
5、单击’主页’或者自定义的地址
6、用js来window.open等方式打开(还有location.href,location.replace())。
在PHP中可以通过预定义变量 SERVER获取HTTP的Referer,即: _SERVER获取HTTP的Referer,即:_SERVER[‘HTTP_REFERER’]。
Apache利用HTTP_Referer防盗链
Apache利用HTTP_Referer防盗链
简单的,我们可以用HTTP请求header中的referer判断,只要referer是内部网站的地址或者可信任的地址,就可以访问相应资源。通过Apache的FilesMatch配置可以实现,在Apache的配置文件httpd.conf中加入:SetEnvIfNoCase Referer “^http://www.example.com” local_ref=1SetEnvIfNoCase Referer “^http://test.example.com” local_ref=1<FilesMatch “\.(txt|doc|mp3|zip|rar|jpg|gif)”>Order Allow,DenyAllow from env=local_ref #referer为www.example.com或test.example.com的请求Allow from 127.0.0.1 #本机地址</FilesMatch>其中SetEnvIf指令根据客户端的请求属性设置环境变量,SetEnvIfNoCase代表当满足某个条件时,为变量赋值,一般结合其他指令使用。也可以使用正则表达式:SetEnvIf Referer “^http://(.)+\.ilinux\.cn/” local_ref=1 SetEnvIf Referer “^http://(.)+\.isql\.cn/” local_ref=1 SetEnvIf Referer “^http://(.)+\.other\.org\.cn/” local_ref=1
SetEnvIf Request_URI “/logo(.)+” local_ref=0 <FilesMatch “\.(mp3|wmv|png|gif|jpg|jpeg|avi|bmp|ram|rmvb|rm|rar|zip|mp3)”> Order Allow,Deny Allow from env=local_ref </FilesMatch>
SpringMvc中防盗链
public class SpringMVCInterceptor implements HandlerInterceptor {/*** preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用,SpringMVC中的Interceptor拦截器是链式的,可以同时存在* 多个Interceptor,然后SpringMVC会根据声明的前后顺序一个接一个的执行,而且所有的Interceptor中的preHandle方法都会在* Controller方法调用之前调用。SpringMVC的这种Interceptor链式结构也是可以进行中断的,这种中断方式是令preHandle的返* 回值为false,当preHandle的返回值为false的时候整个请求就结束了。*/@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {// TODO Auto-generated method stub//sql注入参数处理Iterator<String> key = request.getParameterMap().keySet().iterator();String value = null;while (key.hasNext()) {value = request.getParameter(key.next());if (value.indexOf(" AND ") > -1 || value.indexOf(" and ") > -1 || value.indexOf(" OR ") > -1 || value.indexOf(" or ") > -1) {return false;}}String referrer = request.getHeader("referer");String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();//防盗链if(referrer==null||referrer.equals("")||referrer.lastIndexOf(basePath)==0){return true;}else{return false;}return true;}
配置interceptors
<mvc:interceptors><bean class="com.kingnode.xsimple.filter.SpringMVCInterceptor"/></mvc:interceptors>
HTTP Referer(页面统计/资源防盗链)相关推荐
- 使用HttpServletRequest对象的getHeader(“referer”)方法实现下载资源防盗链的功能
请编写一个类,该类使用HttpServletRequest对象的getHeader("referer")方法实现下载资源防盗链的功能 在实际开发中,经常会使用referer头字段, ...
- php破解referer防盗链解析,Referer原理与图片防盗链实现方法详解
本文实例讲述了Referer原理与图片防盗链实现方法.分享给大家供大家参考,具体如下: 1.图片防盗链 在一些大型网站中,比如百度贴吧,该站点的图片采用了防盗链的规则,以至于使用下面代码会发生错误. ...
- referer htttp headers 统计信息 防盗链
HTTP headers是HTTP请求和相应的核心模块,它承载了关于客户端浏览器.请求页面.服务器等相关信息.Referer是HTTP头中的一个属性,告诉服务 器我是从哪个页面链接过来的,所携带的信息 ...
- Referer的理解及防盗链
HTTP请求的头信息里面,Referer是一个常见字段,提供访问来源的信息.很多开发者知道这个字段,但是说不清它的具有细节.本文详细介绍该字段. 一.Referer的含义 现实生活中,购买服务或加入会 ...
- 获取referer中的请求参数_javaweb之request获取referer请求头实现防盗链
在开发web程序的时候,有时我们需要得到用户是从什么页面连过来的,这就用到了referer. 它是http协议,所以任何能开发web程序的语言都可以实现,比如jsp中是: request.getHea ...
- Nginx 配置静态资源防盗链
当本网站的静态资源链接被其他网站给引用,如此可以被盗用静态资源显示. 如本网站资源是www.img.example.com/img.png 在某个其他网站引用了此链接,就直接发生的盗用. <im ...
- web页面防盗链功能使用--request.getHeader(Referer)
使用Request对象设置页面的防盗链 所谓的防盗链就是当你以一个非正常渠道去访问某一个Web资源的时候,服务器会将你的请求忽略并且将你的当前请求变为按正常渠道访问时的请求并返回到相应的页面,用户只有 ...
- 基于NodeJS的HTTP server Plus 2:防盗链(referer)
什么是 "盗链"? "盗链" 说白了就是利用别人网站的资源链接放在自己的站点,在未经允许的情况下去获取别人网站里面的图片或者视频等资源,导致资源所有者的网站的流 ...
- 【JavaWeb开发】Referer防盗链的详解
1. 什么是Referer? Referer 是 HTTP 请求(requset) header 的一部分,当浏览器(或者模拟浏览器行为)向web 服务器发送请求的时候,头信息里就有包含 Refere ...
最新文章
- 首届中文NL2SQL挑战赛:千支队伍参赛,国防科大夺冠
- 队列链式结构C/C++实现(数据结构严蔚敏版)
- 使用c:foreach时链接失效
- ASP.NET+SQL创建存储过程
- 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)
- VNCServer 配置
- win8f8修复计算机,Win8怎么在启动时按F8出现修复计算机选项
- 9999元起!荣耀首部折叠屏手机Magic V正式发布
- 在PaddlePaddle框架下通过两层全连接网络实现IRIS数据分类
- 国内5家云服务厂商 HTTPS 安全性测试横向对比
- 键盘拆开重新安装步骤_电脑键盘如何维修 电脑键盘常见问题维修技巧【详解】...
- Java 网络编程之Socket详解
- Java自定义生成PDF报告
- python求15 17 23 65 97的因数_python练习题-答案
- C程序~一元二次方程求解
- macOS 上都有哪些既免费、又实用的工具?| 新手问号
- 定积分存在定理与原函数存在定理
- ActiveMQ应用笔记四:Ajax应用
- java mysql方言_支持的数据库方言 · drinkjava2/jDialects Wiki · GitHub
- e.getMessage()