我有一個asp.net mvc應用程序,其路線允許用戶請求存儲在Web應用程序目錄之外的文件。如何確保文件路徑在C#中安全?
我只是告訴你它最終將它們限制在一個他們有權訪問的安全目錄中,從而簡化了這個場景。
例如:
如果用戶(其ID爲100)請求:
http://mysite.com/Read/Image/Cool.png
然後我的應用程序將要追加 「Cool.png」 到「C:\ ImageRepository \ Users \用戶100「並將這些字節寫入響應。工作進程有權訪問此路徑,但匿名用戶不能。我已經有這個工作。
但將一些惡意用戶能夠請求是這樣的:
http://mysite.com/Read/Image/..\101\Cool.png
並將其解析爲
"C:\ImageRepository\Customers\101\Cool.png"
(其他一些用戶的形象?)
或者類似的東西那?有沒有辦法確保路徑是乾淨的,這樣用戶被限制到他們自己的目錄?
我不認爲「http://mysite.com/Read/Image/..\101\Cool。 PNG「將與ASP.NET MVC路線一起工作,如果你有正確的設置。你應該做的是確保你的動作查找用戶ID「101」的文件夾,然後在該文件夾中查找圖像「Cool.png」,而不是將所有輸入附加到特定文件夾路徑,這本質上是用戶輸入注入。 – Omar 2009-11-18 01:10:56
是不是請求URI'http://mysite.com/Read/Image/ .. \ 101 \ Cool.png'在它之前被清理爲'http:// mysite.com/Read/101/Cool.png'通過將URI路由到asp.net-mvc中的處理程序的機制解釋? – dtb 2009-11-18 01:13:43
未知 - 我想過,但我需要支持http://mysite.com/Read/Image/Favorites/Randy/Cool.png等合法請求。 dtb - 我只是平原不知道。看起來我的例子不起作用(好!),但我更一般地詢問這類攻擊中的東西,我甚至沒有想到。 – Chris 2009-11-18 01:25:51