亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET中實現文件的保護性下載基礎篇

2024-07-10 13:25:20
字體:
來源:轉載
供稿:網友
一、文件保護性下載的需求

  如果我們需要在站點上出售數字形式的商品,如電子書、數字油畫等,那么如何在供授權用戶正常下載的同時又阻止非授權用戶非法下載您的產品呢? 通過Forms身份驗證,只能使這個問題得到部分解決。本文中,我將講解如何防止某些用戶訪問站點上的某些文件;即使這些文件能夠被這些用戶直接瀏覽。

  解決這個問題的方法有多種,但是有些方法本身就有問題。本文中,我們將考察軟件供應廠商常用的一些技術,然后再介紹一種新的解決方案。需要注意的是,這里介紹的是針對ASP.net站點的。

  二、常見的文件保護技術

  我們中很多人都有網上購買軟件的經驗,所以可能領教過用于文件下載的常見保護措施。下面,我們對它們進行考察。

  壓縮文件口令保護

  這種保護方法比較簡單,它不是防止您下載文件,而是防止未經授權的人員從壓縮文件中提取文件的內容,因為WinZip和許多其他壓縮程序都提供了口令保護功能。然而,這種方法的缺點也很明顯,如果您允許某人訪問該文件內容,那就必須給他提供口令,之后,您卻無法阻止這個人將口令傳給其他人。實際上,如果您搜索互聯網的話,會發現各種各樣的口令遍地都是。采用這種保護措施的時候,只能指望授權用戶是有道德的人,不會將口令外傳?;蛘?,將這種保護措施提供一個層次,為每個人生成一個不同口令的壓縮文件,然后傳給他。 當然,這需要一個文件存儲解決方案,因為需要能控制發送給用戶的文件。這導致第二種文件保護方法。

  電子郵件

  許多軟件供應廠商并不會把文件張貼到它們的網站上,而是向購買該軟件的用戶發送一封電子郵件,告知下載詳細信息,或者直接連同文件一塊發過去。 電子郵件可以包含文件下載鏈接,并限定該鏈接的有效時間。有時候,軟件供應商還可以將這種這種技術跟口令保護相結合。文件一旦交到用戶手里,剩下的保護措施就靠軟件許可和注冊了。其他基于電子郵件的解決方案還有動態生成文件名方法。

  臨時文件名

  一些軟件供應廠商會使用GUID或者其它的秘密的命名技術生成一個難以猜測的文件名,同時還可以令文件只能在規定時間內下載。

  三、技術分析

  雖然這些技術仍在使用,但是它們卻不能在您的站點上開辟一片客戶區域,使得用戶能夠檢查他們的購買歷史記錄,并隨時重新下載他們的軟件。依我看來,提供了類似功能的站點能夠提供更好的用戶體驗,對軟件供應商來說也更容易管理——用戶購買產品之后,您僅需給用戶發送一封包含許可證密鑰和他們在站點上相應客戶區域的鏈接即可。這樣的話,用戶知道可以隨時登錄和下載軟件,他們就會安心多了,即使弄丟了軟件文件也不用怕了。

  為此,我們將介紹一種結合了ASP.net的Forms身份驗證和稱為HTTP處理程序的保護方案來提供這種良好的用戶體驗。類System.Web.UI.Page本身就是一個HTTP處理程序,并且會注冊到您的機器的Web.config文件中。

內容導航

  四、HTTP處理程序

  實際上,使用ASP.NET定制HTTP處理程序并沒有人們想象的那么復雜,下面我們用盡量容易理解的方式來討論這一主題。HTTP處理程序的應用有很多,不過我們這里主要討論它在文件保護問題方面的應用。

ASP.NET中實現文件的保護性下載基礎篇

圖4 給IIS添加zip擴展名映射

  

ASP.NET中實現文件的保護性下載基礎篇

圖5 映射zip擴展名

  建立這個表項后,我們的映射表將如圖5所示。注意在這個表中的所有其他擴展名例如VBPROJ、CONFIG等等,aspnet_isapi.dll也會攔截這些擴展名以便進行保護。這就是當企圖瀏覽web.config文件時會被重定向到一個拒絕頁面的原因。

  在IIS中創建這個表項之后,如果嘗試直接瀏覽我們站點上的ZIP文件的時候,如果用戶沒有通過身份驗證的話,IIS會將其重定向到登錄頁面。所以,現在我們已經能夠防止匿名用戶下載我們的文件了,不過,一旦通過了站點的身份驗證,這種保護就形同虛設了。

內容導航

  八、更加具體的保護措施

  我們的目標是,讓授權用戶能夠瀏覽一個包含了已經購買的軟件的頁面,并且通過單擊其中的鏈接就可以下載特定的商品。列出產品時,可以使用表結構,但是如何來保護鏈接呢? 之前我們介紹的方法只是防止匿名用戶下載壓縮文件,但是現在我們要防止授權用戶直接瀏覽壓縮文件。為此,我們需要編寫一個定制的處理程序。

  定制的HTTP處理程序是實現了IHttpHandler接口的類。這個接口定義了一個稱為ProcessRequest的方法,以及一個Boolean類型的名為IsReusable的屬性。該屬性決定了其它請求是否能夠利用同一個處理程序,所以這里簡單返回一個真值。這個方法將會收到一個HttpContext類型的參數。這變量為我們提供了訪問該請求整個上下文的權限,包括請求中的信息和訂制另一個方向上的請求的方法。

  現在,我們要創建一個稱為FileDenialHandler的處理程序,它的作用是停止一個請求,并將用戶重定向到一個頁面來通知他們訪問被拒絕。當這個處理程序取得該請求的時候,就會調用ProcessRequest方法并且執行重定向。



Code highlighting produced by Actipro CodeHighlighter (freeware)


  如您所見,這個頁面位于根目錄的Downloads/Files文件夾中,完整的FileDenialHandler.cs處理程序如下所示:



Code highlighting produced by Actipro CodeHighlighter (freeware)


  現在,這個FileDenialHandler類什么也沒做,所以必須將其寫入站點。為了這樣,我們將其放入web.config文件的中。

  文件web.config列出了配置部分的所有特殊處理程序,并為其規定了相應的信息,包括實例化這個處理程序的謂詞,匹配要讓這個處理程序來處理的文件的通配符路徑,以及用于該定制的處理程序的類型定義。在這個例子中,添加的配置部分如下所示:



Code highlighting produced by Actipro CodeHighlighter (freeware)


  參數type是標準的.NET完全限定名寫法,并通過逗號組合了一個組件程序集名稱。在實際的Web項目中編寫處理程序的時候,可以省去程序集名稱。

  現在這個條目將所有的壓縮文件請求轉發給新的處理程序,因此立即將請求重定向到“Access Denied”頁面。即使在本例中跳過該IIS條目,它仍然會照常工作,因為這些事情都交由我們的處理程序了。 然而,我們想要的效果是讓系統在判定匿名用戶訪問非法的ZIP 文件之前,首先把他們導航至登錄頁面。

  如果檢查框架目錄中的web.config文件,就會發現一列處理常見文件擴展名用于ASP.NET的處理程序。定義這個文件中的部分的處理程序決定了IIS如何恰當地轉發ASPX頁面、ASMX Web 服務以及所有其他文件。 這個處理程序列表還定義了哪些文件擴展名是禁用的,例如*.config。事實上,可以利用一個稱為HttpForbiddenHandler的處理程序來禁用所有以擴展名.config結尾的文件,并自動顯示一個“HTTP 403error Forbidden :Access is denied ”頁面。

  所以您可能問,無什么不只用Microsoft提供的處理程序來處理壓縮文件呢? 答案是,當然可以用,不過我們需要自己的“access denied”頁面,這樣通過定制我們自己的拒絕頁面,就能跟我們的網站風格保持一致。在某些情況下,我們還想為用戶提供更多的信息,甚至向管理員發送“未經授權的嘗試”類電子郵件。

  這里只是防止下載所有的壓縮文件,但是我們實際想要做的是什么?對了,我們要取得從我們站點上文件下載方式的絕對控制權。我們不想讓用戶直接瀏覽壓縮文件。通過表結構,我們可建立一個項目、用戶列表,以及每個用戶購買產品的關系表。因此如果我們有一個用戶名和一個產品序列號,就可以通過一個簡單的數據庫查詢來判斷這個用戶是否購買了這個產品。同時,我們還想讓用戶只需單擊一個鏈接就能啟動查詢并確定是否被允許下載文件。 這些功能的確非常令人向往。

內容導航

  九、控制下載

  下面,我們開始講述如何編寫一個用于某些文件請求的處理程序,以及該處理程序的安裝方法。我們的處理程序的功能很簡單,它只是將請求重定向到其他地方而已。ASP.NET還提供了另外一種文件擴展名即ASHX,它無需安裝到web.config文件中。我們可以創建一個以這個擴展名結尾的類,來實現IHttpHandler接口,并就直接導航至該類。實際上它與一個頁面非常類似,只是它不會使用Web表單和Code-Behind類,所以它是一種更加簡潔的方案。

  現在,我們創建一個新的處理程序稱為Download.ashx,并讓用戶瀏覽到該處理程序的位置,同時在QueryString參數中規定一些信息。下面的URL就是下載鏈接:

  ~/Downloads/Download.ashx?Product=101

  這個URL表示下載與產品101有關的文件。用戶或者鏈接可以訪問上述URL來試圖下載一個文件,這時,該處理程序的ProcessRequest方法就會執行。

  利用標準Forms身份驗證對用戶身份進行驗證,這樣就能訪問在我們站點上下文中的User對象。請記住,HTTP上下文會傳遞給該處理程序的ProcessRequest方法,所以能訪問到所需的內容。對象User允許我們獲得使用User.Identity.Name的授權用戶的名稱,還有,我們還可以使用該方法訪問User表中的用戶。訪問用戶的名稱,我們要使用User.Identity.IsAuthenticated的值來檢查他們是否已經過身份認證,如果沒有,將其重定向到“access denied”。此外,我們還要訪問請求的產品號碼,代碼如下所示:



Code highlighting produced by Actipro CodeHighlighter (freeware)


context.Request.QueryString["Product"]

  這樣,我們就取得了產品號碼和用戶名。 有了這兩者,我們就可以訪問UserProducts表并確定這個用戶是否購買過這個產品。此外,這個表還存儲有該產品的文件名。

  既然有了用戶名和產品號碼,并通過它們確定除了用戶購買情況。如果該用戶沒有購買相應的產品,我們就將其重定向到前面的處理程序,并返回一個訪問拒絕頁面。為簡潔起見,我們將其重定向到一個告知他們還沒有購買過此產品的頁面,并告知如何進行購買。

  如果確定該用戶購買了這個產品,可以通過ProductFileName字段了解該用戶可以查看哪些文件。這里,我們沒有存儲完整的路徑,只是存儲了文件名。如果需要,我們可以從web.config中的設置來獲得該文件夾,所以最終獲得了完整的文件路徑和名稱,并授權下載。 下面我們通過稱為StartDownload方法來完成此任務:



Code highlighting produced by Actipro CodeHighlighter (freeware)


  這里的ProcessRequest方法會調用StartDownload方法,完整的Download.ashx代碼如下所示:



Code highlighting produced by Actipro CodeHighlighter (freeware)


  這個方法會收到文件的名稱以及HttpContext。由此處,我們將清空響應緩沖區,設置一個新的頭部,然后設置內容類型。最后,使用WriteFile方法輸出該文件,最終用戶會收到一個文件保存或打開窗口。

  注意,使用WriteFile會輸出ZIP 文件,而是要Response.Redirect則會把用戶重定向到訪問拒絕頁面。使用這種技術的時候,聰明的用戶可以繞過安全檢查而直接導航至Download.ashx文件。但即使它們設法直接瀏覽到ZIP 文件,也會被FileDenialHandler處理程序重定向到訪問拒絕頁面。

  注意這兩種類型處理程序的區別,一個是可以放在外部組件中的標準C#(或者VB.NET)類,如果您需要編寫可重用的處理程序的時候,這種類型比較理想,因為您可以把它們編譯成一個動態鏈接庫,并在不同的站點之間分享。當然,我們需要在web.config文件中對它們進行注冊。對于ASHX類型的處理程序,可以像ASPX頁面一樣添加到站點中。事實上,我們可以使用其他技術來完成類似Download.ASHX的功能,但是ASHX處理程序是更加簡潔的解決方案。

  十、小結

  使用ASP.NET保護文件下載的所有方法中,利用HTTP處理程序是最重要的一種。通過與其他技術相結合,我們不僅能夠防止非授權用戶下載文件,還能在處理用戶下載文件試圖時獲得絕對控制權,希望本文的內容對您能夠有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人四级hd版| 亚洲欧美日韩区| 中文字幕日韩欧美在线视频| 午夜精品久久久久久99热| 中文字幕亚洲欧美| 性日韩欧美在线视频| 精品亚洲va在线va天堂资源站| 午夜精品久久17c| 欧美成人中文字幕| 亚洲精品久久久久中文字幕二区| 亚洲图片欧美日产| 97久久精品视频| 中文字幕精品久久| 国产日韩在线看| 国产精品无码专区在线观看| 亚洲精品成人久久| 欧美大片免费观看| 国产精品pans私拍| 亚洲午夜女主播在线直播| 欧美老女人在线视频| 久久久久久高潮国产精品视| 亚洲美女视频网站| 国产中文字幕91| 国产精品视频大全| 97成人精品区在线播放| 欧美xxxx14xxxxx性爽| 欧美激情性做爰免费视频| 国产精品亚洲第一区| 亚洲精品白浆高清久久久久久| 亚洲国产精品久久精品怡红院| 91欧美精品午夜性色福利在线| 久久久久日韩精品久久久男男| 久久久久北条麻妃免费看| 91精品久久久久久久久久久久久久| 国产精品视频成人| 68精品国产免费久久久久久婷婷| 亚洲美女激情视频| 久久中国妇女中文字幕| 亚洲免费av网址| 亚洲自拍偷拍一区| 国产精品www色诱视频| 久久久国产精品x99av| 国产精品成人av性教育| 亚洲天堂第二页| 奇米四色中文综合久久| 日韩中文字幕在线精品| 欧美精品在线网站| 国产国产精品人在线视| 欧美精品九九久久| 久久久免费高清电视剧观看| 亚洲成人免费网站| 日韩精品免费在线播放| 中文国产成人精品| 欧美一区二区视频97| 日韩欧美黄色动漫| 亚洲午夜久久久影院| 国产精品网红直播| 国产精品久久久久久久久免费看| 欧美综合一区第一页| 欧美大片第1页| 亚洲丝袜一区在线| 精品国产999| 国产丝袜一区视频在线观看| 亚洲国产另类久久精品| 欧美日韩精品在线| 亚洲乱码一区av黑人高潮| 国语自产精品视频在线看抢先版图片| 国产精品99蜜臀久久不卡二区| 亚洲色图15p| 久久久久国产精品免费网站| 欧美精品性视频| 91产国在线观看动作片喷水| 国产69精品久久久| 午夜精品一区二区三区在线视频| 精品日本美女福利在线观看| 色天天综合狠狠色| 亚洲精品视频网上网址在线观看| 亚洲人成绝费网站色www| 黑人巨大精品欧美一区免费视频| 日韩视频一区在线| 国内精品一区二区三区四区| 国产精品久久91| 国产精品视频地址| 成人网在线免费观看| 日韩不卡在线观看| 日韩的一区二区| 国产精品黄色av| 亚洲已满18点击进入在线看片| 日韩黄色在线免费观看| 欧美激情欧美激情在线五月| 97**国产露脸精品国产| 精品久久久久久久久久| 久久精品久久久久久| 91禁国产网站| 亚洲一区亚洲二区亚洲三区| 精品一区二区三区电影| 国产精品99蜜臀久久不卡二区| 91牛牛免费视频| 国产日韩欧美一二三区| 亚洲女成人图区| 久久久久久久999精品视频| 亚洲电影免费在线观看| 久久精品国产99国产精品澳门| 91精品国产成人| 国产亚洲一区二区在线| 精品毛片三在线观看| 亚洲一区二区自拍| 欧美激情精品久久久久久变态| 国产午夜精品视频免费不卡69堂| 欧美一区二区视频97| 亚洲国产小视频| 日韩免费在线免费观看| 成人黄色av免费在线观看| 国产999精品久久久影片官网| 久久精品视频在线观看| 日本久久久久久久久| 亚洲缚视频在线观看| 亚洲一区二区三| 热久久免费视频精品| 国产精品免费久久久久影院| 91国自产精品中文字幕亚洲| 国产欧美一区二区白浆黑人| 国产亚洲精品久久久优势| 97精品国产97久久久久久春色| 欧美性20hd另类| 伊人成人开心激情综合网| 欧美一二三视频| 国产美女直播视频一区| 日韩精品中文字幕有码专区| 国内精品一区二区三区四区| 欧美激情第6页| 一区二区三区www| 岛国av一区二区在线在线观看| 欧洲亚洲免费在线| 国产成人拍精品视频午夜网站| 欧亚精品在线观看| 亚洲精品国产拍免费91在线| 久久久国产成人精品| 久久久国产精品亚洲一区| 久久99精品久久久久久噜噜| 97在线视频观看| 欧美中文字幕视频在线观看| 国产精品美女999| 美女性感视频久久久| 精品日韩美女的视频高清| 91在线|亚洲| 色www亚洲国产张柏芝| 精品国产91乱高清在线观看| 国产精品入口夜色视频大尺度| 国产成人精品日本亚洲专区61| 一本色道久久88综合亚洲精品ⅰ| 欧美日韩国产一区二区三区| 热久久免费视频精品| 欧美日韩福利在线观看| 亚洲成人a**站| 九九热精品视频| 欧美成年人视频网站| 久久韩国免费视频| 亚洲国产成人精品一区二区| 日韩视频免费中文字幕| 久久精品国产v日韩v亚洲| 欧美一二三视频| 亚洲国产成人精品电影| 精品国产91久久久久久|