Php

為共享主機 (WAMP) 保護 mod_php 的技術?

  • February 25, 2015

我已經設置了一個用於生產的 Web 伺服器。作業系統是 Windows Server,它執行 Apache 2.0 和 PHP 5.3 作為 apache 模組(還有 MySQL ……)。它用於託管屬於不同客戶的多個虛擬主機(Apache vhost)。

此時 PHP 正在以系統使用者身份執行。將來可能會授予客戶 FTP 訪問權限,因此 - 預設情況下 - 每個客戶都可以通過 PHP 訪問整個系統。這顯然是不可接受的。

我知道我可以在 PHP 中設置 open_basedir,但我不確定它是否包含且足夠可靠以被視為解決方案 - 它是否限制對所有 PHP 函式的訪問,例如包含…?PHP流怎麼樣?

我也知道 IIS 提供了解決該問題的方法,但我更喜歡保留 Apache。

理想情況下,我希望建立一個能夠滿足以下要求的解決方案(主要):

  • 優雅而自動。我正在手動管理伺服器 - 我希望每個虛擬主機的設置盡可能少地涉及設置和配置編輯。
  • 允許例外。大多數託管網站都是由我自己開發的,我想將它們全部連結到一個庫文件夾,因此應該允許對該文件夾進行只讀訪問,儘管它位於虛擬主機的根目錄之外。

那麼,如果有的話,有哪些可用的選項?我已經做了一些研究,似乎該領域的大部分工作都是在 Linux 系統上完成的。

PHP 和 FTP 沒有任何關係。

FTP 是一種(糟糕、不安全、古老)在機器之間移動文件的方式。

PHP 是一種由您的 Web 伺服器執行的腳本語言。

您可以(並且可能應該)使用 IIS FTP 功能來授予對伺服器的 FTP 訪問權限,同時拒絕您的使用者訪問諸如根卷 ( C:\) 和共享庫目錄之類的內容。

您的安全問題的另一半是 PHP 本身——mod_php在多租戶安全方面並不出色,open_basedir 也不是一個包羅萬象的解決方案(儘管總比沒有好)。

  • 如果您想要真正的安全性,您幾乎需要在 chroot 中為每個人提供自己的 Apache

這是不愉快的(對於您作為管理員),但安全。它也很靈活,因為您可以為每個站點修改 php.ini。

  • 您的下一個最佳選擇是將 PHP 作為 CGI

您可以呼叫 PHP 的 CGI 解釋器作為網站所有者的使用者 ID——這使您受益於作業系統的文件權限功能,並且避免了必須為每個站點維護單獨的 Apache/PHP 實例。

主要的缺點是 PHP 必須被稱為 CGI,因此您失去了任何依賴 PHP 作為 Web 伺服器模組的功能。

open_basedir並沒有真正保護任何東西,因為它只影響PHP:您的使用者仍然可以上傳/執行二進製文件以訪問其他人的數據。

php.ini中的disable_functionsanddisable_classes指令可讓您關閉某些不安全的功能(您需要自己獲取可利用類的列表)。

  • 但問題是:這些是黑名單,而黑名單是為了AWFUL安全,因為如果您錯過了可利用/易受攻擊的功能,您仍然容易受到攻擊。

你可以用這種方式遮住明顯的洞,但你基本上就是那個手指插在堤壩上的荷蘭小男孩。你只有這麼多手指,而且總是多一個洞……


絕對不應該將 Apache 執行為Local System(或任何具有提升權限的帳戶)。

在將此伺服器投入生產之前,請確保根據 Apache 文件中的最佳實踐對其進行配置。

引用自:https://serverfault.com/questions/515938