看書時發現一個實現asp.net 2.0中實現防止盜鏈的方法,其實際的原理就是利用了IIS中HttpHandler模組來處理的。因為比如
平時用IIS只是處理如asp,aspx等檔案,沒處理如iis,jpg等圖片的,下面簡單小結下
1 建一個網站(vs.net 2005),然後添加一個Handler.ashx處理檔案,處理HTTP請求,代碼如下
程式碼
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
//判斷是否是本地引用,如果是則返回給用戶端正確的圖片
//這裡的判斷就是用到了http請求中所記錄的頁資訊
//如果是網站,可將“localhost”修改為網站地址
if (context.Request.UrlReferrer.Host == "localhost")
{
//設定用戶端緩衝中檔案到期時間為0,即立即到期。
context.Response.Expires = 0;
//清空伺服器端為此會話開闢的輸出緩衝
context.Response.Clear();
//獲得檔案類型
context.Response.ContentType = "image/jpg";
//將請求檔案寫入到輸出緩衝中
context.Response.WriteFile(context.Request.PhysicalPath);
//將輸出緩衝中的資訊傳送到用戶端
context.Response.End();
}
//如果不是本地引用,則屬於盜鏈引用,返回給用戶端錯誤的圖片
else
{
//設定用戶端緩衝中檔案到期時間為0,即立即到期。
context.Response.Expires = 0;
//清空伺服器端為此會話開闢的輸出緩衝
context.Response.Clear();
//獲得檔案類型
context.Response.ContentType = "image/jpg";
//將特殊的報告錯誤的圖片檔案寫入到輸出緩衝中
context.Response.WriteFile(context.Request.PhysicalApplicationPath + "error.jpg");
//將輸出緩衝中的資訊傳送到用戶端
context.Response.End();
}
}
public bool IsReusable
{
get
{
return true;
}
}
}
然後同樣建立一個Handler.cs檔案,放在app_code目錄下,其內容就是上面的handler.aschx了,
2 在web.config中配置如下
程式碼
<httpHandlers>
<add verb = "*" path = "*.jpg" type="Handler" />
</httpHandlers>
3 在IIS裡處理
在IIS裡的預設網站的“配置”裡,在“應用程式對應”裡添加映射
其中映射的可執行檔為 “vs.net2005安裝路徑\aspnet_isapi.dll",副檔名為".jpg",這樣就可以了!