我正在透過 PHP 應用程式處理用戶上傳。
我想保護伺服器的安全,這樣使用者就無法利用任何漏洞,例如上傳 php shell 並執行它。
我已將其設定為將所有上傳內容移至網路根目錄之外的單獨資料夾中。作為額外的安全措施,我已經刪除了特定資料夾上 IUSR 中除「讀取」之外的所有權限。
為了更進一步,我被告知要透過 IIS 來停用資料夾上的腳本執行。
考慮到我的情況和我已經做過的事情,這是必要的嗎?如果是,我將如何使用 IIS 8 來實現這一目標。
謝謝
答案1
「是否有必要」這個問題的答案是,我們需要檢查此應用程式和您的組織所需的安全等級。
安全最佳實踐提倡「深度防禦」方法,這意味著安全是保護資訊(或其他)資產的安全控制分層。
要確定此數據是否需要額外的控制,請評估風險 - 存在可被利用的威脅的可能性有多大,以及此數據/系統受到損害的影響是什麼 - 不僅要考慮數據的機密性,而是惡意用戶更改資料或關閉系統或刪除資料。然後確定控制的成本是否超過投入控制的收益。
拒絕虛擬目錄上的腳本存取是一件相當簡單的事情,並且可以成為針對能夠提升權限的惡意使用者的一層防禦。通常實現此控制,以便上傳到目錄的檔案無法執行 - 例如。獲得遠程 shell。因此,如果「成本」微不足道,並且我們假設獲得遠端 shell 會產生很大影響,即使機率很低,那麼答案就是禁用資料夾上的腳本執行(如果您願意,請隨意在此處做出決定)不同意這個評價)。
要在 IIS 8 中停用對資料夾的腳本訪問,過程應與 IIS 7 相同,在 web.config 中配置處理程序對應。
此連結解釋了各種選項:
這可能就是您想要的,它將保留靜態文件處理程序:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<clear />
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
</handlers>
</system.webServer>
</configuration>
另請注意該頁面上有關所需配置的最後評論:
只是為了為可能遇到相同問題的其他人添加已發布的解決方案:在我發現處理程序被鎖定在頂層之前,這些都不適合我。我不是伺服器管理員,甚至不是伺服器管理員,所以這花了我一些時間。在編輯 applicationHost.config 檔案以允許覆寫之前,即使在較低層級的 web.config 檔案中包含一個空白部分也足以破壞該層級以下的所有內容。不過現在效果很好。