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
}
}
https://www.owasp.org/index.php/Path_Traversal – CBroe
一個簡單的解決方案是枚舉文件並將它們存儲在數據庫/數據存儲中,並將GUID作爲ID存儲 - 然後您可以傳遞該GUID的文件名。 – Steve
@Steve正如我寫的,這是一個日誌瀏覽器。日誌文件通常不存儲在數據庫中,所以我會討論這個解決方案的簡單性:) – Spook