例如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”)的权限运行,除非您可以将脚本更改为该用户,否则您必须将它们更改为 777 - 世界可读。唉,这意味着您的服务器邻居可以查看它们 - 想想您存储数据库访问密码的位置。大多数共享服务器已经使用诸如 phpsuexec 之类的东西解决了这个问题,它们以脚本所有者的权限运行脚本,因此您可以(必须)将您的代码更改为 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 允许一些内置模块无法提供的更安全的配置,特别是在共享主机的上下文中。您究竟想保护自己免受什么侵害?