2015-02-10 157 views
0

我得到在下面的線設防錯誤 -Fortify的 - 路徑操作

string path = "<hardcodedpath>"; 
    var fileBytes = System.IO.File.ReadAllBytes(path + fileName); 
    return File(fileBytes, System.Web.MimeMapping.GetMimeMapping(fileName), fileName); 

如: - 路徑= C:\工作臺\項目\\文件\

我確保(白名單?)參數fullPath是單獨從一個預定義文件夾中提取的(相同的代碼不會粘貼到此處),並且沒有人能夠訪問除預定義文件夾中的文件之外的任何其他文件。

但是,Fortify不會將這些問題標記爲已解決。 Fortify如何解決這個問題?還有什麼需要照顧的嗎?

錯誤消息 - 攻擊者可以通過.cs行446控制文件系統路徑參數爲ReadAllBytes(),這允許他們訪問或修改其他受保護的文件。

+0

[安全違規 - Fortify,MVC]的可能重複(http://stackoverflow.com/questions/28175747/security-violation-fortify-mvc) – 2015-02-10 21:04:22

+0

如果您正確閱讀該問題,這不是重複的。 – 2015-02-10 21:20:06

+0

沒有看到上下文,很難看出這不是重複的。請至少告訴我們您發佈的代碼不在控制器操作中,並且'fullPath'無法被客戶端代碼操縱。 – 2015-02-10 21:24:05

回答

2

由於愚蠢的信譽規則,我無法發表評論,因此我會將其置於答案中。你已經展示了「路徑」來自哪裏,但是你沒有提及「文件名」來自哪裏。如果該變量的值來自不可信來源,那麼這就是該問題的原因。您需要將該變量列入白名單,以便攻擊者可以更改路徑。一旦你知道你的白名單是好的,你可以壓制這個問題。白名單本身不會阻止Fortify再次發現問題,因爲它無法分辨白名單是否足夠。

您也可以嘗試在他們的在線論壇上發佈Fortify問題https://protect724.hp.com。支持小組監視這些論壇。