ASP.net中如何实现基于UrlRewrite防盗链
ASP.net中最快实现UrlRewrite的方法这篇文章中说了如何做UrlRewrite,那只是一个最简单的应用

其实利用UrlRewrite与IIS的设置我们可以实现简单而有效的防盗链功能。

假设你的站点有一个文件:web.rar,你希望只有具有某些特定域名的来源地址或是已经登陆的用户才能访问,这时就得用到防盗链功能,在ASP时代,我们需要借助第三方组件来完成这个效果,但是在ASP.net中我们可直接利用Context.RewritePath来实现了。

下载配置文件:

复制代码代码如下:
<?xml version="1.0" encoding="utf-8"?> 
<DownLoad> 
<CheckType>1</CheckType> 
<CookiesName>username</CookiesName> 
<UrlPattern> 
<![CDATA[//(.+?)/.rar/b]]> 
</UrlPattern> 
<UrlReplace> 
<![CDATA[Default.aspx?d=$1.rar]]> 
</UrlReplace> 
<AllowHost> 
<![CDATA[127.0.0.1]]> 
</AllowHost> 
</DownLoad> 

说明:

CheckType:要求验证的类型(1:只验证合法的域名,2:只验证是否有cookies,3:同时验证域名与cookies) 
CookiesName:要验证的cookies名称,可为空。 
UrlPattern:请求的URL格式。 
UrlReplace:当下载无效时转向的URL格式。 
AllowHost:允许的来源域名。

Global.aspx中的配置:

复制代码代码如下:
void Application_BeginRequest(object sender, EventArgs e) 

bool IsAllowDomain = false; 
bool IsLogin = false; 
string CookiesName = "UserName", AllowHost, ReferrerHost=""; 
int CheckType = 1; 
bool AllowDown = false; 
string[] AllowHostArr; 
string UrlPattern = "", UrlReplace = ""; 
string[] pattern, replace; 
string ConfigFile = ConfigurationManager.AppSettings["DownLoadConfig"]; 
if (ConfigFile != "") 

try 

System.Xml.XmlDataDocument XDConfig = new System.Xml.XmlDataDocument(); 
XDConfig.Load(AppDomain.CurrentDomain.BaseDirectory + @"/" + ConfigFile); 
if (XDConfig.SelectSingleNode("DownLoad/CheckType").InnerText != "") 
{ (脚本学堂  www.jbxue.com)
CheckType = int.Parse(XDConfig.SelectSingleNode("DownLoad/CheckType").InnerText); 

if (XDConfig.SelectSingleNode("DownLoad/CookiesName").InnerText != "") 

CookiesName = XDConfig.SelectSingleNode("DownLoad/CookiesName").InnerText; 

AllowHost = XDConfig.SelectSingleNode("DownLoad/AllowHost ").InnerText; 
AllowHostArr = AllowHost.Split('|'); 
UrlPattern = XDConfig.SelectSingleNode("DownLoad/UrlPattern").InnerText; 
UrlReplace = XDConfig.SelectSingleNode("DownLoad/UrlReplace").InnerText; 
pattern = UrlPattern.Split('@'); 
replace = UrlReplace.Split('@'); 
if (CookiesName == "") CookiesName = "UserName"; 
IsLogin = false.Equals(Request.Cookies[CookiesName] == null || Request.Cookies[CookiesName].Value == ""); 
if (Request.UrlReferrer != null) ReferrerHost = Request.UrlReferrer.Host.ToString(); 
if (AllowHostArr.Length < 1) 

IsAllowDomain = true; 

else 

for (int HostI = 0; HostI < AllowHostArr.Length - 1; HostI++) 

if (AllowHostArr[HostI].ToLower() == ReferrerHost.ToLower()) 

IsAllowDomain = true; 
break; 



switch (CheckType) 

case 1: 
AllowDown = true.Equals(IsAllowDomain); 
break; 
case 2: 
AllowDown = IsLogin; 
break; 
case 3: 
AllowDown = true.Equals(IsAllowDomain && IsLogin); 
break; 

if (AllowDown == false) 

string oldUrl = HttpContext.Current.Request.RawUrl; 
string newUrl = oldUrl; 
for (int iii = 0; iii < pattern.Length; iii++) 

if (Regex.IsMatch(oldUrl, pattern[iii], RegexOptions.IgnoreCase | RegexOptions.Compiled)) 

newUrl = Regex.Replace(oldUrl, pattern[iii], replace[iii], RegexOptions.Compiled | RegexOptions.IgnoreCase); 
oldUrl = newUrl; 


this.Context.RewritePath(newUrl); 


catch 



Web.Config中的配置:

复制代码代码如下:
<appSettings> 
<add key="DownLoadConfig" value="DownLoad.config"/> 
</appSettings> 

IIS中的配置:

可执行文件填入:c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll(视实际情况变动,与.aspx的一样就成)

记得把那个:检查文件是否存在 前的勾去掉。

你可为任何你想要防盗链的文件加上这个,其实在IIS6的2003Server版本中有一个“通配符应用程序映射”:

添加了这个就等于把所有的请求都交给了.net,这样实现的防盗链,即使是迅雷或是别的什么下载工具照样是下不了的,下的文件名虽然是那个但是内容就完全不是了

ASP.net UrlRewrite的防盗链功能的更多相关文章

  1. 实现fastdfs防盗链功能

    目录 1.背景 2.实现原理 2.1 开启防盗链 2.2 重启 nginx 2.3 Java代码生成token 1.token生成规则 2.java生成token 3.测试 3.1 带正确token访 ...

  2. nginx——防盗链功能

    我们经常会看到在浏览某一图片时会弹出一“403权限禁止”错误,这说明有可能正在浏览的这个网站用到的图片在盗用别的网站图片,而被盗用的网站采用了防盗链技术.那么怎样才能不让自己的网站受害呢? 下面我来介 ...

  3. web页面防盗链功能使用--request.getHeader("Referer")

    使用Request对象设置页面的防盗链 所谓的防盗链就是当你以一个非正常渠道去访问某一个Web资源的时候,服务器会将你的请求忽略并且将你的当前请求变为按正常渠道访问时的请求并返回到相应的页面,用户只有 ...

  4. Asp.net 图片文件防盗链介绍

    想要实现文件放盗链的功能 首先添加一个全局文件 Global.asax 在 Application_BeginRequest中我们可以判断Http报文头中的UrlReferre是否来源本站. if ( ...

  5. ASP.NET实现图片防盗链(转)

    使用httpHandle来实现,对图片文件的请求做专门的处理第一步:创建一个类,继承自IHttpHandler,代码如下 C# code using System; using System.Web; ...

  6. 关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能)

    以数据库后台驱动的动态内容的网站,经常会遇到这些的问题: 当在浏览器的地址栏输入一个无效的参数时,会出现数据库的错误提示,这是一个安全的隐患 搜索引擎无法收录你的所有网页 网页的链接地址是一系列的参数 ...

  7. 如何利用jsp实现防盗链功能

    index.jsp ----------------------------- Place your content here here is index jsp get header info a. ...

  8. Nginx缓存功能、防盗链、URL重写

    nginx做为反向代理时,能够将来自upstream的响应缓存至本地,并在后续的客户端请求同样内容时直接从本地构造响应报文. nginx的缓存数据结构: 共享内存:存储键和缓存对象元数据 磁盘空间:存 ...

  9. nginx跨域、防盗链、压缩等小功能详解

    原文链接:http://www.studyshare.cn/software/details/1173/0 一.跨域 跨域由来,是因为W3C组织制定的浏览器安全规范,不允许一个域名内的网站在没有别的域 ...

随机推荐

  1. 网络编程socket

    socket socket解释 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄. 应用程序通常通过"套接字"向网络发出请求或者应答 ...

  2. Codeforces 132E Bits of merry old England 【最小费用最大流】

    题意: 让你输出长度为n的某个序列,然后给你m个变量. 每次给某个数赋值的代价是 假设赋值a=7那么代价是3,因为7的二进制位中有3个1. 要求最后总代价最小. 输出总共要进行操作的次数,和最小代价. ...

  3. bash 学习笔记

    shell:能够操作应用程序的接口就称为shell. Linux由C编写的. TAB键的使用 alias:设置别名

  4. Android Eclipse 里面依赖工程无法关联源码解决方案

    android开发中,debug调试是一种非常实用快速定位问题的办法.eclipse中多工程依赖状态下会偶现无法debug的困扰,debug中的代码执行时会报出如下错误  The JAR of thi ...

  5. hbase的rowkey简单设计

    问题: 需要查询某一用户某时间做了什么,PlatID和vopenid可以保证一个用户唯一,但同一时间同一用户可能日志有多条. 使用PlatID(int).vopenid(int)和dtTime(dat ...

  6. Spark On Yarn:提交Spark应用程序到Yarn

    转载自:http://lxw1234.com/archives/2015/07/416.htm 关键字:Spark On Yarn.Spark Yarn Cluster.Spark Yarn Clie ...

  7. (转)WebApi自动生成在线文档WebApiTestClient

    原文链接:http://www.cnblogs.com/landeanfen/p/5210356.html 前言:这两天在整WebApi的服务,由于调用方是Android客户端,Android开发人员 ...

  8. SQL语句在OLAP的妙用(多维分析与指标计算)

    ================================================================================ BI传统实现原理: 1.涉及维度管理( ...

  9. Arch时间校准

    sudo ln -s /usr/share/zoneinfo/UTC /etc/localtime sudo hwclock --systohc --utc sudo timedatectl set- ...

  10. Botposter.com集群ETCD2.3.7升级至3.0实录[原创]

    7月1日,为庆祝我党生日,ETCD隆重发布了3.0版本.Botposter.com也在第一时间对集群进行了升级.本文是升级过程的记录与总结(文中假设读者已经使用或测试过ETCD V2,如有不妥请见谅) ...