有沒有辦法創建一個受保護的下載鏈接,該鏈接是隨機的,過期的,需要密碼並指向C#中與IIS 7.0關聯的特定文件?創建受保護的鏈接
幾個隨機鏈接可以鏈接到同一個文件。
內置代碼或可能是第三方庫?
例如,http://www.example.com/<some random gibberish>/<md5 of file>/file.jpg
有沒有辦法創建一個受保護的下載鏈接,該鏈接是隨機的,過期的,需要密碼並指向C#中與IIS 7.0關聯的特定文件?創建受保護的鏈接
幾個隨機鏈接可以鏈接到同一個文件。
內置代碼或可能是第三方庫?
例如,http://www.example.com/<some random gibberish>/<md5 of file>/file.jpg
一種方式做,這是使用的GUID。 GUID被設計爲不會相互碰撞,並且該設計也會導致難以猜測有效的GUID。我確信有人會告訴我這不是很安全!那麼,你也用密碼保護。在C#中生成一個GUID非常容易。
我猜你需要的是首先採用這種方式攝取要保護的文件,其次是處理器將響應給定路徑中的請求並檢查路徑中的GUID以確定它是有效。
然後,您需要一個數據庫後端來維護與URL相對應的GUID列表,密碼(最好是加密的)和到期日期。該處理程序將檢查所請求的URL/GUID的條目以查看鏈接是否已過期,然後提示用戶(可通過Web表單輕鬆完成此操作)密碼,並根據存儲在數據庫中的加密密碼進行檢查。
要生成一個GUID,你想:
System.Guid.NewGuid().ToString()
要創建一個名爲模塊(用於IIS7)每一個請求,然後才能將條目添加到您的web.config中像這樣:
<modules>
<add name="MyDownloadModule" type="Example.MyDownloadModule, Example"/>
</modules>
其中MyDownloadModule是包含您的處理程序的類,位於名稱空間示例中。
該類那麼你需要實現IHttpModule接口內部,特別是重載方法:
public string ModuleName {
get { return "MyDownloadModule"; }
}
public void Init(HttpApplication app) {
// Add an event handle which is called at the beginning of each request
app.BeginRequest += new EventHandler(this.AppBeginRequest);
}
//
// Our event handler for the BeginRequest event
//
private void AppBeginRequest(Object source, EventArgs e)
{
HttpRequest request = app.Context.Request;
//
// Is this a file download?
//
if (request.AppRelativeCurrentExecutionFilePath == "~/downloads") // or whatever
{
// this is where you work your GUID inspecting magic
}
}
走向看,這種方式意味着這將是呼籲每向服務器發出請求,這可能不是你想要的。
您可以隨時創建自己的HttpHandler,然後實現自己的專有過期/驗證代碼。
喜歡的東西:
http://www.example.com/download?token={your_token}
然後,它將是一件微不足道的小事有處理器攔截請求,並抓住從磁盤上的文件,並將其交付給客戶如果令牌查詢字符串值是正確的?
有關IHttpHandler接口的詳細信息,請參閱MSDN http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx