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. [DataTable]控件排序事件中用DataView及DataTable排序

    控件排序事件中用DataView及DataTable排序 文章分类:.net编程 在做ASP.NET页面开发时,经常要用到dataset(或者DataTable),绑定到DataGrid或GridVi ...

  2. 解决oralce 11g dg搭建报错:ORA-16664、ORA-16714、ORA-16810问题--转

    下面不是小编错误报告只是转了网络一篇,同时也解决了我的问题所以复制过来给各位参考. 最近在弄11g的dg时,遇到如下问题,记录下.首先在主上查看报如下错误: DGMGRL> show confi ...

  3. 利用Scanner键盘输入

    Scanner不在java.lang.*包中,故必须import包java.util.Scanner.输入流(InputStream)为System.in 方法如下:Scanner s= new Sc ...

  4. Hibernate——主键配置

    <id>元素中的<generator>用来为该持久化类的实例生成唯一的标识,hibernate提供了很多内置的实现. Increment:由hibernate自动递增生成标识符 ...

  5. IE条件注释

    <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> <!--[if IE]> 所有的IE可识别 <![ ...

  6. Haar特征

    转自:http://blog.csdn.net/carson2005/article/details/8094699 Haar-like特征,即很多人常说的Haar特征,是计算机视觉领域一种常用的特征 ...

  7. 001 The Hello World In Csharp

    C#是面向对象编程语言,语法和JAVA非常相似.接下来让我们看一下C#的Hello world. //001.cs using System; public class Hello { public ...

  8. Flash Air 打包安卓 ane

    工具: 1.flash builder 2.adt打包工具 3.数字证书 一. 创建 jar 文件 1. 打开flash builder, 新建一个java 项目. 2.点击项目属性,选择Java构建 ...

  9. 挣值管理(EVT)

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 第二个大计算,根据PV.EV.AC计算出CV.SV.SPI.CPI.ETC.EAC. ...

  10. url 参数的加号变成空格处理

    今天在调试客户端向服务器传递参数时,参数中的“+”全部变成了空格,原因是URL中默认的将“+”号转义了. 解决方法如下: 方法一.修改客户端 将客户端带“+”的参数中的“+”全部替换为‍“2B%”,这 ...