2017-09-19 29 views
0

我正在爲web應用程序編寫一個簡單的日誌瀏覽器。服務器列出所有的日誌文件,用戶可以選擇其中的一個,服務器顯示其內容。該環境是ASP.NET MVC。傳遞文件名作爲URI參數 - 如何保護?

在URI中傳遞文件名是危險的 - 一個簡單的竅門是使用"..\..\web.config"來顯示配置文件以及所有密碼。我顯然需要保護腳本,以便它只允許訪問特定的文件。最簡單的方法是檢查傳遞的文件名是否包含序列\..並拒絕這樣的查詢。

我的問題是:這個解決方案是否足夠安全?或者我應該選擇完全不同的方法?


我提出的解決方案(討論):

public LogData GetLog(string file) 
{ 
    string path = HttpContext.Current.Server.MapPath("~/App_Data/Logs/"); 
    string fileToOpen = Directory.EnumerateFiles(path, "*.*") 
       .Where(f => Path.GetFileName(f) == file) 
       .FirstOrDefault(); 

    if (fileToOpen != null) 
    { 
     // Process 
    } 
} 
+0

https://www.owasp.org/index.php/Path_Traversal – CBroe

+0

一個簡單的解決方案是枚舉文件並將它們存儲在數據庫/數據存儲中,並將GUID作爲ID存儲 - 然後您可以傳遞該GUID的文件名。 – Steve

+0

@Steve正如我寫的,這是一個日誌瀏覽器。日誌文件通常不存儲在數據庫中,所以我會討論這個解決方案的簡單性:) – Spook

回答

0

你能管理的讀/寫權限爲你的應用程序服務器或通過連接到DB接口與客戶溝通,你可以接受ID作爲參數,在服務器上獲取路徑。