HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

  if (Request.ServerVariables["HTTP_REFERER"] == null || !Request.ServerVariables["HTTP_REFERER"].ToString().Contains(Request.ServerVariables["HTTP_HOST"].ToString()))
{
Server.Transfer("Error.aspx");
}

下列情况是从浏览器地址栏正常取得Request.ServerVariables("HTTP_REFERER"):
1) 直接用<a href="">
2) 用Submit或<input type="image">提交的表单(POST或GET)
3) 使用JAvaScript提交的表单(POST或GET)

 
下面我们再看看Request.ServerVariables("HTTP_REFERER")不能正常取值的情况:
1) 从收藏夹链接
2) 单击主页或自定义的地址
3) 在浏览器中直接输地址
4) 使用JavaScript的Location.href或者是Location.replace()
5) <%Response.Redirect%>
6) <%Response.AddHeader%>或者是<mete http-equiv="refresh">转向
7) 用XML加载地址
显然,Request.ServerVariables("HTTP_REFERER")在多数情况下是不能正常工作的,下面我们看一个例子:
ref.asp
<% 
response.write "You came from: " & request.servervariables("http_referer") 
%>
ref.htm
<% 
Response.AddHeader "Refresh", "10;URL=ref.asp" 
%>
<meta http-equiv='refresh' content='10;URL=ref.asp'>
<form method=GET action=ref.asp name=getform> 
<input type=submit value=' Go there (GET) >> '> 
<input type=image style='cursor:hand'> 
</form><p> 
看看上面的代码会得到什么的结果.
<form method=POST action=ref.asp name=postform> 
<input type=submit value=' Go there (POST) >> '> 
<input type=image style='cursor:hand'> 
</form><p>
<a href='ref.asp'>直接链接</a><p>
<a href='#' onclick='window.location.href="ref.asp";return false;'>Javascript location</a><p>
<a href='#'onclick='window.location.replace("ref.asp");return false;'>Javascript replace</a><p>
<a href='#' onclick='document.getform.submit();return false;'>javascript GET</a><p>
<a href='#' onclick='document.postform.submit();return false;'>javascript POST</a>
Request.ServerVariables(HTTP_REFERER)的工作方式

HTTP Referer 防外链的更多相关文章

  1. 用nginx做反向代理来访问防外链图片

    用nginx做反向代理来访问防外链图片 女儿的博客从新浪搬到wordpress后,发现原来博客上链接的新浪相册的图片都不能访问了,一年的博客内容,一个个去重新上传图片,修正链接也是个大工程.还是得先想 ...

  2. PHP伪造referer突破网盘禁止外链(附115源码)

    新建一个文件file.php.后面的参数就是需要伪造referfer的目标地址吧.如:file.php/http://www.xxx.xxx/xxx.mp3 复制内容到剪贴板 代码: <?$ur ...

  3. 利用js查找页面中的内链,外链

    起初没听说过内链外链,只有链接锚文本,在面试中被问到如何查找到页面中的内链和外链,就在想,什么是内链和外链啊??????? 后来面试官给我解释了一下他们的区别,自己稍微懂了,自己当时回答的是通过获取a ...

  4. 小讲堂:Mobox文档管理软件中的文件外链是什么?

    今天我们来讨论Mobox文档管理软件中的文件外链是什么?熟悉MOBOX的朋友们应该知道,如果有文件需要分享给其他同事,直接可以进行文件共享.对方会在AM的即时通讯客户端有消息提醒,点击消息提醒可以看到 ...

  5. 那些年因为粗心导致的外链css无效

    css文件三种引用的三种方式: 1.外链: <link rel= "stylesheet" href=""> 注:如果使用外链式绝对不可以忘记 re ...

  6. SVN外链

    1 外链使用场景 使用Subversion进行版本管理时,有时需要将一些公共库或者开源库链接到自己项目中,为了同时做到与外部库实时更新,使用Subversion的外链功能,从而将外部的库当做本地项目的 ...

  7. 手动获取酷我Mp3外链

    素材→http://player.kuwo.cn/webmusic/st/getNewMuiseByRid?rid=MUSIC_随便找一首歌http://www.kuwo.cn/yinyue/1034 ...

  8. jQuery外链新窗口打开

    对于外链,为了留住用户在本站,我们通常会使用新窗口打开,你可以设置target="_blank".然而手动一个是麻烦,另一个则是有可能会遗漏,本文通过jQuery查询要点击的链接, ...

  9. 如何获取Flickr图片链接地址作为外链图片

    Flickr,雅虎旗下图片分享网站.为一家提供免费及付费数位照片储存.分享方案之线上服务,也提供网络社群服务的平台.其重要特点就是基于社会网络的人际关系的拓展与内容的组织.这个网站的功能之强大,已超出 ...

随机推荐

  1. winform插件机制学习

    这两天在看自定义控件,原来有太多知识没有掌握.今天看到插件机制,心里突然一亮,这个东西听了不少次,就是不知道是啥回事.这次有幸书里包含一个案例,我就跟着它一步步来.终于知道是什么回事了.这个应该在软件 ...

  2. 本地yum库制作及本地安装Docker

    生产环境中,我们总是会遇到服务器无法连接外网的情况,这样,如果想安装某个应用,而这个应用依赖的其他类库又特别多,就很痛苦了.这个时候,就需要自己制作个本地的yum库,进行本地安装.本文将以Docker ...

  3. sprint2 项目的粗略展示

  4. Android中Bitmap和Drawable

    一.相关概念 1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable) ...

  5. 【Spring】利用Spring最简单地使用异步方法

    有时候我们想异步地调用某个方法. 比如这个场景:在业务处理完毕后,需给用户发送通知邮件.由于邮件发送需调用邮箱服务商,有可能发生阻塞,我们就可以异步调用.当然有个前提,即如果邮件发送失败,不需要提示用 ...

  6. iOS Error

    1),'libxml/tree.h' file not found Solution: 1.  导入libxml2.dylib 包 2.设置Header Search Paths 为 /usr/inc ...

  7. 安装DotNetCore.1.0.0-VS2015Tools.Preview2失败解决方案

    1.把安装文件放入非系统盘 2.命令行带参数运行: DotNetCore.1.0.0-VS2015Tools.Preview2.0.1.exe SKIP_VSU_CHECK=1 或 DotNetCor ...

  8. HTML布局与框架

    HTML块 HTML块元素 块元素在显示时,通常会以新行开始 如:<h1>.<p>.<ul> <!DOCTYPE html> <html> ...

  9. linux mysql5.5安装与配置(转帖,在网上收集,自用)

    MySQL是一个关系型数据库管理系统 ,由瑞典MySQL AB公司开发,目前属于Oracle 公司.MySQL分为社区版和商业版,由于其体积小.速度快.总体拥有成本低,尤其是开放源码 这一特点,一般中 ...

  10. MFC编程入门之十二(对话框:非模态对话框的创建及显示)

    上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 非模态对话框显示后,程序其他窗口仍然能正常运行,可以响应用户输入,还可以相互切换.上一讲中创建的Tip模态对话框 ...