2
如果動態構建UNC路徑應使用哪些技術,以便將它們限制爲特定的根路徑。驗證UNC路徑(防止 .. .. 和類似的注入)
string root = @"\\Blah\Share\YouStayHere\";
//pretend second string is from a query string a user could manipulate
string path = @"\\Blah\Share\YouStayHere\" + @"..\..\TresspassingQueryString";
if(! SomeValidation(root, path)) { throw new Exception("you dirty bastard"...
授予這應該有可能與權限管理,但也許其他目錄是在另一個ASP頁的相同的應用程序中的上下文訪問權限,這樣就不會是一種選擇。
我知道Request.MapPath可以用來在應用程序的目錄中保持訪問,但這是.NET應用程序虛擬路徑之外的共享。
我希望能使用Path.Combine解決的路徑,然後檢查,以確保pathCombined
開始root
,但Path.Combine將保持.... \
此外,我想有可能是其他類型的注入,有人可以在這種情況下做,所以我希望有一個更通用的東西,而不是僅僅爲「..」標記做正則表達式。
我可能還會確定,即使它是一個有效的路徑,但是在根之外侵入,那麼我會確保任何錯誤消息都不明確。即你不希望有一條消息有「這是一條無效路徑」,而另一條錯誤「這是一個受限制的區域」,因爲第二條錯誤消息告訴他們他們猜到了一條真實的路徑,給他們提供了關於文件結構的信息。 – AaronLS