一。使用IHttpHandler防止非法链接
由于资源的限制与保护,现在很多网站都启用了防盗链机制,在ASP.NET实现防盗链其实很轻松,
我写了一个防盗链的IHttpHandler(源码),本人也是新手,希望更位前辈多多指教.
以下是实现步骤:
1.在将生成的eWebapp.NoLink.dll文件拷贝到网站Bin目录.
2.在Web.config 里配置
也可以有Path中配置多种文件格式的过滤,格式如(path="*.jpg,*.bmp,*,exe")
3.在IIS里增加一个应用程序扩展。在“默认网站”->“属性”->“主目录”->“配置”。在弹出的“应用程序配置”窗口里按“添加”,在弹出的“添加/编辑应用程序扩展名映射”窗口里“可执行文件”选择C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,在扩展名里输入“.过滤的文件格式”,然后确定即可。
4.测试吧
------------------------------------------------------
二。以下是一个url重向的例子
web.config中:
相关的类文件:
由于资源的限制与保护,现在很多网站都启用了防盗链机制,在ASP.NET实现防盗链其实很轻松,
我写了一个防盗链的IHttpHandler(源码),本人也是新手,希望更位前辈多多指教.
以下是实现步骤:
1.在将生成的eWebapp.NoLink.dll文件拷贝到网站Bin目录.
2.在Web.config 里配置
<httpHandlers>
<add verb="*" path="*.过滤的文件格式" type="eWebapp.NoLink.IHandler,eWebapp.NoLink"/>
</httpHandlers>
<add verb="*" path="*.过滤的文件格式" type="eWebapp.NoLink.IHandler,eWebapp.NoLink"/>
</httpHandlers>
也可以有Path中配置多种文件格式的过滤,格式如(path="*.jpg,*.bmp,*,exe")
3.在IIS里增加一个应用程序扩展。在“默认网站”->“属性”->“主目录”->“配置”。在弹出的“应用程序配置”窗口里按“添加”,在弹出的“添加/编辑应用程序扩展名映射”窗口里“可执行文件”选择C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,在扩展名里输入“.过滤的文件格式”,然后确定即可。
4.测试吧
------------------------------------------------------
二。以下是一个url重向的例子
web.config中:
<httpHandlers>
<add verb="*" path="*.tab.aspx" type="Portal.TabHttpHandler, Portal" />
</httpHandlers>
<add verb="*" path="*.tab.aspx" type="Portal.TabHttpHandler, Portal" />
</httpHandlers>
相关的类文件:
using System;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.Handlers;
using System.Web.SessionState;
namespace Portal
{
/// <summary>
/// Summary description for TabHttpHandler.
/// </summary>
public class TabHttpHandler : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
string path = context.Request.Url.AbsolutePath.ToLower();
string tabRef = path.Substring(path.LastIndexOf("/") + 1); // get "TabRef.tab"
tabRef = tabRef.Substring(0, tabRef.LastIndexOf(".tab.aspx")); // get "TabRef"
Hashtable r = new Hashtable();
foreach(string key in context.Request.QueryString.Keys)
{
r[key] = context.Request[key];
}
r["TabRef"] = tabRef;
string url = Portal.API.Config.GetMainPage();
bool firstParam = true;
foreach(DictionaryEntry e in r)
{
if(firstParam)
{
url += "?";
firstParam = false;
}
else
{
url += "&";
}
url += e.Key.ToString() + "=" + e.Value.ToString();
}
context.Server.Transfer(url);
}
public bool IsReusable
{
get
{
return true;
}
}
}
}
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.Handlers;
using System.Web.SessionState;
namespace Portal
{
/// <summary>
/// Summary description for TabHttpHandler.
/// </summary>
public class TabHttpHandler : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
string path = context.Request.Url.AbsolutePath.ToLower();
string tabRef = path.Substring(path.LastIndexOf("/") + 1); // get "TabRef.tab"
tabRef = tabRef.Substring(0, tabRef.LastIndexOf(".tab.aspx")); // get "TabRef"
Hashtable r = new Hashtable();
foreach(string key in context.Request.QueryString.Keys)
{
r[key] = context.Request[key];
}
r["TabRef"] = tabRef;
string url = Portal.API.Config.GetMainPage();
bool firstParam = true;
foreach(DictionaryEntry e in r)
{
if(firstParam)
{
url += "?";
firstParam = false;
}
else
{
url += "&";
}
url += e.Key.ToString() + "=" + e.Value.ToString();
}
context.Server.Transfer(url);
}
public bool IsReusable
{
get
{
return true;
}
}
}
}