2008-10-04 27 views
0

我有一個場景,我不確定我的方法是否是最好的,我很感謝反饋/建議。什麼是基於業務邏輯屏蔽網絡資源的策略

場景: 我有一堆基於Flash的(swf)「模塊」,它們託管在我的aspnet應用程序中。每個閃存都有自己的文件系統目錄,其中包含閃存資源。考慮這個簡單的網站結構:

/webapp/index.aspx
/webapp/flash/flash1/flash.swf
/webapp/flash/flash1/someimage.jpg
/Web應用程序/閃光燈/ FLASH1/someclip.mp3
/webapp/flash/flash2/flash.swf
/webapp/flash/flash2/someimage.jpg
/webapp/flash/flash2/someclip.mp3

諸如此類

,其中命名約定是/Web應用程序/閃光燈/閃光燈[ID]/

我要實現它檢查用戶是否應該被允許進入*子文件夾中的文件的安全機制「[ID ]',它是內容。

**插入業務邏輯基於存儲在SQL數據庫這裏*

我正在考慮寫信息的HttpModule它確實像

ProcessRequest(){ 
    if(Request.RawUrl.Contains("/webapp/flash") && !userHasValidLicenseForModule(1)){ 
     Redirect("login.aspx");  
    } 
} 

但有這麼的HttpModule只適用於文件中的缺點擴展名映射到aspnet(在IIS6中)。這意味着我將不得不將所有可能的擴展映射到該過程(.mp3,.jpg等),這是我寧願避免的。

我也在考慮使用HttpHandler,但是Flash文件需要能夠使用相對URL鏈接到它的資源。 (所以像/webapp/getprotectedstuff.ashx?file=flash1234/flash.swf代理狀的圖案並不者優先)

也許是明智的Flash文件和資產保存在網站根目錄之外的全部。也許還有其他的策略我沒有想過。

使用aspnet安全並編寫自定義成員資格提供程序?

有什麼想法?

回答

1

您是否考慮過在swf加載後通過HTTP請求向服務器驗證資源訪問?

我在哪裏工作,我們通過flash向用戶提供在線培訓,而不是驗證HTTP請求本身,我們允許swf先加載,然後向服務器發出請求以驗證用戶是否應該訪問swf並且他們正在從我們的網站訪問swf,而不是從其他位置訪問。

如果任何驗證步驟失敗(無法在必要位置找到驗證文件,或者用戶沒有有效會話或無法訪問特定的培訓),那麼它們將在閃存中收到錯誤並且沒有重要的內容加載。

另外,如果您確定要嚴格限制文件的訪問權限,以便他們只能由應該訪問的用戶加載,那麼我可能會建議您使用第二個選項來存儲文件一個單獨的非公共位置,然後使用處理程序腳本加載swf。

0

爲什麼不使用ISAPI過濾器?
好的,不回答 - 很多原因;-)。但是,嚴肅地說,如果你擁有開發者的力量,那麼你可能需要考慮這條路線。如果你有一個簡短的,你必須處理的擴展名列表(GIF,JPG,MP3),HTTP模塊似乎是更好的路線。如果它是漫長的,或者是開放式的,我會同意放棄這一點。

如果適用,您可能想要考慮的另一個選項是基於角色的NTFS訪問列表。如果這適合,它可能是最簡單和最乾淨的方式。