例如 ,使用mod_php
而不是php-cgi
更安全吗? 或者使用mod_perl
而不是传统的cgi-scripts
更安全?
我主要对安全问题感兴趣,但如果存在显着差异,速度可能会成为一个问题。
安全在什么意义上? 无论哪种方式,它实际上取决于正在运行的脚本以及它的编写程度。 这些天太多的脚本都是半成品,并且没有正确地进行输入验证。
我个人更喜欢FastCGI到mod_php,因为如果FastCGI进程死了,新的进程就会产生,而我看到mod_php会杀掉整个Apache。
至于安全性,使用FastCGI,您可以在技术上在默认Web服务器用户的不同用户下运行php进程。
另外,如果您正在使用Apache的新工作线程支持,您将需要确保不使用mod_php,因为某些扩展不是线程安全的并且会导致竞争条件。
如果你运行自己的服务器去模块方式,它会更快。 如果您在共享服务器上,则已经为您做出了决定,通常是在CGI方面。 原因是文件系统权限。 PHP作为一个模块运行时具有http服务器的权限(通常是'apache'),除非你可以将脚本chmod到该用户,你必须将它们chmod到777 - 世界可读。 这意味着,您的服务器邻居可以查看它们 - 想一想存储数据库访问密码的位置。 大多数共享服务器使用像phpsuexec这样的东西来解决这个问题,这些东西使用脚本所有者的权限运行脚本,所以你可以(必须)将你的代码chmoded到644. Phpsuexec只运行PHP作为CGI - 这或多或少都是,它只是一个本地机器的东西 - 对整个世界没有任何影响。
大多数安全漏洞都是由于脚本本身的糟糕编程而发生的,所以如果它们作为cgi或模块运行它们真的没什么问题。 也就是说,apache模块可能会崩溃整个网络服务器(特别是如果使用线程MPM)并且mod_php有点着名。
cgi会慢一点,但现在有解决方案,主要是FastCGI和朋友。
你的威胁模型是什么?
从PHP 5.2.6的PHP install.txt文档:
与CGI二进制文件相比,服务器模块提供了明显更好的性能和附加功能。
对于IIS / PWS:
警告
通过使用CGI设置,您的服务器可能会受到多种攻击。 请阅读我们的CGI安全部分,了解如何保护自己免受这些攻击。
像mod_php或FastCGI这样的模块比普通的CGI快得多..只是不做CGI。 正如其他人所说,PHP程序本身是最大的安全威胁,但忽略了共享主机上的另一个考虑因素。
如果您的脚本位于与其他php程序共享的主机上且主机未以安全模式运行,则所有服务器进程可能都以同一用户身份运行。 这可能意味着任何其他PHP脚本都可以读取您自己的脚本,包括数据库密码。 因此,请务必调查服务器配置,以确保您的代码对其他人不可读。
即使您控制自己的托管,请记住,服务器上的另一个被黑客入侵的Web应用程序可能是其他人的管道。
使用内置模块肯定比使用CGI更快。 安全隐患取决于配置。 在默认配置中它们几乎相同,但cgi允许内置模块无法提供的一些更安全的配置,特别是在共享主机的上下文中。 你究竟想要什么来保护自己?