ASP.net中实现基于UrlRewrite的防盗链功能

 更新时间:2021年9月22日 10:12  点击:1255
在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 != "")
{
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,这样实现的防盗链,即使是迅雷或是别的什么下载工具照样是下不了的,下的文件名虽然是那个但是内容就完全不是了,嘿嘿。。。
[!--infotagslink--]

相关文章

  • apache 防盗链配置方法

    修改httpd.conf 找到 <Dirctory "/var/www/html"> 在这个Dirctory容器内添加: 代码如下 复制代码 SetEnvIfNoCase Referer "^http://www.111cn.net/"...2016-01-28
  • Linux中Nginx的防盗链和优化的实现代码

    今天是周末小编在值班哈,很开森,工作使我快乐,本文重点给大家介绍Linux中Nginx的防盗链和优化问题及实现代码,需要的朋友跟随小编一起看看吧...2021-06-19
  • 真正可用的IIS的ISAPI-Rewrite伪静态URL图片防盗链规则写法

    本规则支持白名单排除式防盗链,搜索引擎友好不屏蔽,被盗链后的错误提示转向,支持各种文件类型,经作者亲验真的能用...2016-01-27
  • ASP.NET中Global和URLReWrite用法

    这篇文章主要介绍了ASP.NET中Global和URLReWrite用法,较为深入浅出的分析了Global.asax的功能及配置技巧,并实例分析了URLReWrite实现伪静态的方法,需要的朋友可以参考下...2021-09-22
  • php简单防盗链验证实现方法 原创

    这篇文章主要介绍了php简单防盗链验证实现方法,通过$_SERVER['HTTP_REFERER']获取来路页面URL再进行判断进而实现对非本地URL的拦截功能,需要的朋友可以参考下...2016-07-25
  • nginx rewrite重写规则与防盗链配置方法教程详解

    这篇文章主要介绍了nginx rewrite重写规则与防盗链配置方法教程详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-09-28
  • Asp.net 图片文件防盗链(尊重劳动成果)及BeginRequest事件学习

    关于图片盗链这个问题,毕竟是自己的劳动成功,很多人不希望别人就那么轻易地偷走了;反盗链的程序其实很简单,熟悉ASP.NET 应用程序生命周期的话很容易就可以写一个,运用HttpModule在BeginRequest事件中拦截请求就ok了...2021-09-22
  • 用rewrite实现IIS下图片文件防盗链的办法

    IIS不支持UrlRewrite。 所以我们需要通过安装第三方服务器扩展让IIS支持UrlRewrite。 目前有一种产品能比较好地支持IIS的UrlRewrite,名字叫ISAPI_Rewrite。...2016-01-27
  • php破解apache,nginx,iis防盗链图片

    现在多数网站都有防盗链一些简单设置了最常用的就是apache,nginx,iis设置了,那么这种设置是不是不可破的呢,答案是否写了,下面我们一起来看破解方法。 有自己的主机...2016-11-25
  • apache设置防盗链有效方法

    代码如下 复制代码 <VirtualHost *:80> DocumentRoot d:/soft/soft ServerName 111cn.net SetEnvIfNoCase Referer "^http://www.111cn.net...2016-01-28
  • IIS图片防盗链和下载的解决方案

    最近服务器需要防图片别盗链,所以找了很多代码,下面给出具体配置代码...2016-01-27
  • Nginx防盗链的配置方法

    这篇文章主要介绍Nginx下的防盗链的配置方法,需要的朋友可以参考下...2016-01-27
  • php防盗链几种代码

    我们这里讲述的防盗链代码只专注于php的解决方案,当然如果你有服务器管理权限或htaccess文件操作我建义不要用php防盗链哦。 先来看个最简单的 下面是php实现的代...2016-11-25
  • Nginx防盗链的3种方法

    Nginx防盗链的3种方法,需要的朋友可以参考下。...2016-01-27
  • php采集代码-反防盗链采集

    很多php新手在开发自己的网站采集功能时都会直接用到file_get_contents来读取或fopen是吧,是吧,我们下载采集功能加强了了一点点就是要对方的防盗链都不能防止的采集功...2016-11-25
  • PHP文件与图片防盗链处理类

    防盗链就是对一些文件资源进行包装了,这样对方是看不到我们文件源地址了,下载是也是php文件打开了,下载成功之后就成了要下载的文件了,下面我来给各位分享一站长写的类。...2016-11-25
  • php下通过伪造http头破解防盗链的代码

    方法一 $txt=$_get['url']; echo referfile($txt,'http://www.111cn.net/'); function referfile($url,$refer='') { $opt=array('http'=>array('header'=>"refe...2016-11-25
  • php实现博客,论坛图片防盗链的方法

    这篇文章主要介绍了php实现博客,论坛图片防盗链的方法,涉及php字符串结合session判定图片的相关操作技巧,需要的朋友可以参考下...2016-10-20
  • win2008 IIS7.5防盗链配置方法

    最近有客户配置了win2008 iis7.5,因为转载的比较多,所以考虑到简单的防盗链,特整理下方便需要的朋友...2016-01-27
  • apache 与 iis 防盗链详细方法

    如果网站的流量有限,那么图片防盗链是非常必要的。不仅可以减少流量浪费,而且可以减轻服务器负担。开启图片防盗链功能需要在htaccess文件中加入以下代码:   rewriteengine o...2016-01-28