一。使用IHttpHandler防止非法链接

由于资源的限制与保护,现在很多网站都启用了防盗链机制,在ASP.NET实现防盗链其实很轻松,
我写了一个防盗链的IHttpHandler(源码),本人也是新手,希望更位前辈多多指教.
以下是实现步骤:
1.在将生成的eWebapp.NoLink.dll文件拷贝到网站Bin目录.
2.在Web.config 里配置

<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>  


相关的类文件:

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;
            }

        }

    }

}



posted on 2005-12-08 09:56  今夜太冷  阅读(6551)  评论(2编辑  收藏  举报