2009-12-22 33 views
1

我需要爲Web服務器編寫一個小文件服務組件。有很多服務 文件的問題。因爲「原樣」作爲很大的安全漏洞,這樣如何對給定路徑(從Web服務器)執行安全檢查以提供文件

www.somesite.com/../../../../etc/passwd 

有很多的問題,包括「..」解決與其他許多類似Windows下有許多‘不尋常的方式來指代一些路徑’。還有一些與符號鏈接有關的問題......它們可能會驅使我們離開文檔根目錄。

有沒有關於提供文件和執行安全檢查的好文章或資料?

謝謝。

P.S .:我主要需要POSIX系統的解決方案,但我也需要一個針對Win32的解決方案。

P.P.S:

  • 是否檢查 「..」 和符號鏈接是足夠的POSIX系統? (據我所知它不適用於Windows)
  • 據我記得Windows提供了一些類似的API用於這些目的,有人可以指向它嗎?

爲什麼我需要這樣的:

CppCMS有用於調試的一個簡單的內部Web服務器(我寫了一個),我揣摩這將是多麼難以完全使這個服務器對現實世界很有用(例如,直接在80上監聽,而不是在Web服務器和FastCGI或SCGI連接器後面運行)。

這是我在此使用的file serving application。它做了非常原始的檢查。我主要想讓它安全。

我的回答:

有一個答案https://www.securecoding.cert.org/confluence/display/seccode/FIO02-C.+Canonicalize+path+names+originating+from+untrusted+sources

似乎是不夠好......

簡而言之:使用realpath UNIX下和GetFullPathName Windows下。

最後一點:如果有什麼建議的更詳細的功能我會接受它(尤其是爲Win32位置路徑測試是痛在-...)

+0

這裏是龍。 –

+0

但至少最佳實踐應該是;) – Artyom

+0

您能否更具體一點關於您的網絡服務器 - 這是一個專有的解決方案還是基於一些開源的網絡服務器。我認爲,即使不是全部,大多數網絡服務器已經對這些類型的攻擊採取了某種保護措施,因爲它們已經存在很久了。 – Kimvais

回答

0

好像你正在處理的路徑遍歷 - http://www.owasp.org/index.php/Path_Traversal
該鏈接主要處理Web應用程序,但我認爲其中的一些信息會有幫助。我認爲POSIX系統的最佳做法是chroot並且不允許訪問應用程序根目錄之外的路徑。

+0

謝謝。我知道chroot是最好的方法,但它需要root權限,並且Win32上不可用 – Artyom

1

至於Windows API產品,有一些Shell函數的集合,以PathUrl開頭,可以幫助標準化目錄,路徑和文件名。例如,PathCanonicalize將幫助您將任意路徑導入標準表單。從那裏你可以做進一步的分析。

一般來說,使用特定的事物列表來允許,而不是要禁止的事物列表。壞人總會想到你沒有預料到的新事物。

+0

「PathCanonicalize」不幸的是,如果我通過「../test.txt」它不會刪除「../」,因爲它應該是不行的。 – Artyom

+0

並不意味着暗示'PathCanonicalize'是一個完整的解決方案。它是可以幫助你規範路徑的幾種功能之一。你可能不得不與其他人一起使用它。你也可以看看'InternetCrackUrl'。 –

相關問題