2008-09-16 50 views
17

例如使用mod_php而不是php-cgi更安全嗎? 還是使用mod_perl而不是傳統的cgi-scripts更安全?apache模塊vs cgi(關於安全性)有區別嗎?

我主要關注安全問題,但如果存在顯着差異,速度可能會成爲問題。

+2

我明白這個問題是舊的,但不應該現在去**服務器故障**? – 2014-03-04 12:55:56

+0

@smarinov,應該。但是對於古老的線索來說,它有一個奇怪的政策,它總結爲一個詞:「懶惰」。 SO不在乎。 – Pacerier 2015-03-26 11:15:13

回答

15

安全意義何在?無論哪種方式,它都取決於腳本運行的是什麼以及編寫腳本的程度。如今的腳本太多了,而且沒有正確地進行輸入驗證。

我個人比較喜歡FastCGI到mod_php,因爲如果FastCGI進程死了,一個新進程會產生,而我已經看到mod_php會殺死整個Apache。

至於安全性方面,通過FastCGI,您可以在技術上以不同於默認Web服務器用戶的不同用戶身份運行php進程。

單獨說明,如果您使用的是Apache的新工作線程支持,您將需要確保您沒有使用mod_php,因爲某些擴展不是線程安全的並且會導致競爭條件。

2

使用內置模塊肯定會比使用CGI更快。安全影響取決於配置。在默認配置中,它們幾乎相同,但cgi允許內置模塊無法提供的一些更安全的配置,特別是在共享主機環境中。你想要保護自己什麼?

+1

我沒有任何特別的威脅。但是在同一臺機器上有多個頁面託管。 – Sarien 2008-09-16 22:58:40

+0

您應該先決定要保護自己的內容。這些頁面是由同一個人/機構擁有的嗎?如果沒有,你應該考慮任何不同的解決方案,以不同的用戶運行不同的php腳本,例如(suphp,使用虛擬主機和反向代理等) – 2008-09-16 23:09:23

+0

@ VinkoVrsalovic,通常的威脅模型。防止窺探PHP的源代碼。 – Pacerier 2015-04-03 13:03:56

5

大多數安全漏洞都是由於腳本本身的糟糕編程而產生的,因此如果它們以cgi或模塊的形式運行,那麼它確實有點不切實際。也就是說,apache模塊可能會崩潰整個web服務器(尤其是如果使用線程化的MPM)並且mod_php有點出名。

cgi會慢一些,但現在有解決方案,主要是FastCGI和朋友。

什麼是您的威脅模型?

+0

如果腳本太弱,這並不意味着我們停止保護服務器。兩者都需要強大。威脅模型是爲了防止未經授權的人訪問文件。訪問只能通過PHP腳本完成。 – Pacerier 2015-03-26 11:17:42

4

從PHP INSTALL.TXT文檔爲PHP 5.2.6:

服務器模塊提供顯著更好的性能和更多的功能 相比於CGI程序。

對於IIS/PWS:

警告

通過使用CGI方式安裝,你的服務器是開放的幾種可能 攻擊。請閱讀我們的CGI安全部分,以瞭解如何爲這些攻擊保護您自己的 。

8

如果你運行你自己的服務器去模塊的方式,它有點快。 如果您在共享服務器上,則通常在CGI方面已做出決定。原因是文件系統權限。 PHP作爲一個模塊以http服務器的權限運行(通常爲'apache'),除非你可以將你的腳本chmod改爲該用戶,否則你必須將它們chmod改爲777 - 世界可讀。這意味着,唉,你的服務器鄰居可以看看他們 - 想想你在哪裏存儲數據庫訪問密碼。大多數共享服務器已經使用諸如phpsuexec之類的東西解決了這個問題,它使用腳本所有者的權限運行腳本,因此您可以(必須)將您的代碼修改爲644. Phpsuexec僅以CGI的形式運行 - 這或多或少都是,它只是一個本地機器 - 對整個世界沒有任何影響。

3

一個模塊,如mod_php或FastCGI比普通的CGI快得多..只是不做CGI。正如其他人所說,PHP程序本身是最大的安全威脅,但忽視共享主機上的另一個考慮因素。

如果您的腳本與其他php程序在共享主機上,並且主機未以安全模式運行,那麼所有服務器進程都可能以同一用戶身份運行。這可能意味着任何其他的PHP腳本都可以讀取自己的腳本,包括數據庫密碼。因此,請務必調查服務器配置,以確保您的代碼對其他人不可讀。

即使您控制自己的主機,請記住服務器上另一個被黑客入侵的Web應用程序也可能成爲其他主機的管道。