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. (medium)LeetCode 236.Lowest Common Ancestor of a Binary Tree

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  2. (easy)LeetCode 198.House Robber

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...

  3. 什么是条带化(striping) ?(转载)

    条带(strip)是把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中的不同磁盘上的方法.简单的说,条带是一种将多个磁盘驱动器合并为一个卷的方法. 许多情况下,这是通过硬件控制器来完成的. ...

  4. MPlayer在ARM上的移植(S5PV210开发板)

    MPlayer 1.0已经把大部分解码库都自带了,如ffmpeg,但是自带的音频库在S5PV210下效果非常不好.换成使用libmad效果不错.因此MPlayer 在ARM-Linux的最简单的移植只 ...

  5. Android——android:gravity 和 android:layout_Gravity

    LinearLayout有两个非常相似的属性: android:gravity与android:layout_gravity. 他们的区别在于: android:gravity 属性是对该view中内 ...

  6. Hive基础之HiveServer2 JDBC的使用

    启动HiveServer2: cd $HIVE_HOME/bin 以后台方式默认端口启动HiveServer2(默认端口是10000):hiveserver2 & 以后台方式指定端口的方式启动 ...

  7. winform异步进度条LongTime

    winform异步进度条LongTime,运用到回调函数 定义事件的参数类: namespace LongTime.Business { // 定义事件的参数类 public class ValueE ...

  8. selenium项目总结(UI自动化测试平台搭建、测试报告生成、邮件转发)

    最近博主完成了一个web端UI自动化平台测试环境搭建,包括常用的操作流程组合成方法,组织测试用例,利用框架及报告文件生成,最后通过邮件添加附件的格式发送. 首先UI自动化平台的核心是selenium+ ...

  9. 深度分析DB2修改表

    DB2修改表操作相信大家都不陌生,下文对DB2修改表方面结合了一些例子进行了详细的分析讨论,供您参考学习. DB2修改表使用ALTER TABLE语句来更改列属性,例如可空性.LOB选项.作用域.约束 ...

  10. IP一些基础知识

    1.主机IP地址 IP地址:internet上的每一台计算机都被赋予了唯一的32位Internet地址,简称ip地址. (1)IP地址的组成 IP地址由两部分组成,如图1 网络地址(net-ID) 主 ...