我需要爲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。它做了非常原始的檢查。我主要想讓它安全。
我的回答:
似乎是不夠好......
簡而言之:使用realpath
UNIX下和GetFullPathName
Windows下。
最後一點:如果有什麼建議的更詳細的功能我會接受它(尤其是爲Win32位置路徑測試是痛在-...)
這裏是龍。 –
但至少最佳實踐應該是;) – Artyom
您能否更具體一點關於您的網絡服務器 - 這是一個專有的解決方案還是基於一些開源的網絡服務器。我認爲,即使不是全部,大多數網絡服務器已經對這些類型的攻擊採取了某種保護措施,因爲它們已經存在很久了。 – Kimvais