Php apache模块和cgi(关于安全性)之间有区别吗?

Php apache模块和cgi(关于安全性)之间有区别吗?,php,perl,apache,mod-perl,mod-php,Php,Perl,Apache,Mod Perl,Mod Php,例如使用mod_php而不是php cgi是否更安全? 还是使用mod_perl而不是传统的cgi脚本更安全 我主要对安全问题感兴趣,但如果存在显著差异,速度可能是一个问题。使用内置模块肯定会比使用CGI更快。安全影响取决于配置。在默认配置中,它们几乎相同,但cgi允许一些内置模块无法提供的更安全的配置,特别是在共享主机环境中。您到底想防范什么?大多数安全漏洞都是由于脚本本身的编程糟糕造成的,因此如果它们是作为cgi或模块运行的,这确实是毫无意义的。这就是说,apache模块可能会使整个Web服

例如使用
mod_php
而不是
php cgi
是否更安全? 还是使用
mod_perl
而不是传统的
cgi脚本更安全


我主要对安全问题感兴趣,但如果存在显著差异,速度可能是一个问题。

使用内置模块肯定会比使用CGI更快。安全影响取决于配置。在默认配置中,它们几乎相同,但cgi允许一些内置模块无法提供的更安全的配置,特别是在共享主机环境中。您到底想防范什么?

大多数安全漏洞都是由于脚本本身的编程糟糕造成的,因此如果它们是作为cgi或模块运行的,这确实是毫无意义的。这就是说,apache模块可能会使整个Web服务器崩溃(特别是在使用线程化MPM的情况下),mod_php也因此而闻名

cgi将会变慢,但现在有解决方案,主要是FastCGI和friends


您的威胁模型是什么?

什么意义上的安全性?无论哪种方式,它实际上都取决于运行的脚本以及编写得有多好。现在有太多的脚本是半途而废的,不能正确地进行输入验证

我个人更喜欢FastCGI而不是mod_php,因为如果FastCGI进程死掉,就会产生一个新进程,而我看到mod_php杀死了整个Apache

至于安全性,使用FastCGI,您可以在不同于默认web服务器用户的用户下运行php进程


另一方面,如果您使用Apache新的worker线程支持,您需要确保您没有使用mod_php,因为某些扩展不是线程安全的,并且会导致争用情况。

来自php 5.2.6的php install.txt文档:

服务器模块提供了显著更好的性能和额外的功能 与CGI二进制文件相比的功能。

对于IIS/PWS:

警告

通过使用CGI设置,您的服务器可以接受多种可能的设置 攻击。请阅读我们的CGI安全部分,了解如何防御
您自己也可以避免这些攻击。

如果您按照模块的方式运行自己的服务器,速度会更快一些。
如果您使用的是共享服务器,那么您已经做出了决定,通常是在CGI方面。原因是文件系统权限。PHP作为一个模块在http服务器(通常是“apache”)的权限下运行,除非您可以将脚本chmod到该用户,否则您必须将脚本chmod到777-world-readable。这意味着,唉,您的服务器邻居可以查看它们——想想您将数据库访问密码存储在哪里。大多数共享服务器都使用phpsuexec之类的工具解决了这一问题,它们在脚本所有者的权限下运行脚本,因此您可以(必须)将代码chmoded为644。Phpsuexec只以PHP作为CGI运行——这或多或少是一个本地机器的东西——对整个世界没有任何影响。

像mod_PHP或FastCGI这样的模块比普通CGI快得难以置信。。只是不要做CGI。正如其他人所说,PHP程序本身是最大的安全威胁,但忽略了共享主机上的另一个考虑因素

如果脚本位于与其他php程序共享的主机上,并且该主机未在安全模式下运行,则很可能所有服务器进程都以同一用户身份运行。这可能意味着任何其他php脚本都可以读取您自己的,包括数据库密码。因此,请务必调查服务器配置,以确保其他人无法读取您的代码


即使您控制自己的主机,也要记住,服务器上的另一个被黑客攻击的web应用程序可能是通向其他应用程序的管道。

我没有任何特别的威胁。但是在同一台机器上有多个页面。你应该先决定你想保护自己不受什么影响。这些页面是否属于同一个人/机构?如果不是,你应该考虑任何不同的解决方案来运行不同的PHP脚本作为不同的用户,例如(SUPHP,使用虚拟主机和反向代理,以及其他)@ VinkoVrsalovic,通常的威胁模型。防止窥探PHP的源代码。我已经使用mod_PHP一年了,我从未见过一个子进程杀死整个Apache。@wlf,1年不长。3年了。那么它还活着吗?我知道这个问题很老了,但现在不应该转到服务器故障吗?@smarinov,应该。但是,当涉及到旧线程时,也有一个奇怪的策略,可以用一个词来概括:“懒散”。如果脚本很弱,并不意味着我们停止保护服务器。两者都需要坚强。威胁模型是防止未经授权的人访问文件。只能通过PHP脚本进行访问。。但是慢一点。但也看到