添加注释

用户贡献的注释 16 个注释

匿名
12 年前
重要信息

某些基于 CGI 的 PHP 设置中存在一个严重漏洞,该漏洞至少在过去 8 年内未被发现。

对于 PHP 来说,这意味着包含 ?-s 的请求可能会转储页面的 PHP 源代码。

确保更新到当前版本和/或使用 .htaccess 修补程序,两者都可以在此处获得

PHP 5.3.12 和 PHP 5.4.2 发布
https://php.net/archive/2012.php#id2012-05-03-1
[email protected]
24 年前
更好的是,使用 binfmt_misc:(仅限 Linux)

echo :php3:E::php3::/usr/bin/php: > /proc/sys/fs/binfmt_misc/register

消除了文件顶部需要 #! 的需求。
[email protected]
21 年前
要将 php-cgi 与 suexec 一起使用,每个虚拟主机都需要它自己的 php.ini。这与

SetEnv PHPRC /var/www/server/www.test.com/conf

但 suexec 会杀死这个环境,因为它不知道它是否“安全”,因此您必须编辑 suexec.c 进行编译……
[email protected]
21 年前
如果您使用的是 php per cgi 并且还启用了 mod_gzip,则必须禁用 mod_gzip,以便 php cgi 二进制文件可以使用 --enable-cgi-redirect。mod_gzip 始终将 REDIRECT_STATUS 设置为 200,这使得 php 二进制文件无法知道它是被直接调用还是被重定向调用。
[email protected]
23 年前
如果您关心安全,最好设置

register_globals = off
enable_track_vars = on(从 PHP4.0.3 开始始终启用)

变量顺序的默认设置是
EGPCS
(ENV VARS/GET VARS/POST VARS/COOKIE VARS/SESSION VARS)

想象一下,如果您依赖 ENV VAR,但它被 GET/POST/COOKIE 变量覆盖了?
phpD0TnetATmoritzHYPHONnaumannD0Tcom
18 年前
您收到“未指定输入文件”(又称“世界上第二有用的错误消息”)的最常见原因之一是您将“doc_root”(在 php.ini 中)设置为与 Apache 配置中定义的“DocumentRoot”相同的 value。

对于其他 Web 服务器也是如此。例如,在 lighttpd 上,确保“server.document-root”的值与 php.ini 中定义的“doc_root”相同。
[email protected]
21 年前
我已经设置了使用 SuEXEC 安装 PHP 的指南,这样就不需要 shebang(#!/usr/bin/php4)。希望这对您有所帮助。

http://www.pookey.co.uk/php-security.xml
[email protected]
19 年前
回应 [email protected]

给出的 mod_rewrite 指令中存在几个错误。我发现以下方法有效

RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^cgi-bin/php.cgi - [F]

我从 RewriteCond 中删除了 =,并从 RewriteRule 中删除了开头的 /。
[email protected]
23 年前
如果您想使用 suexec 并通过 #!/usr/local/bin/php 引用您的 php 解释器,请确保在编译 php 时不使用 --enable-force-cgi-redirect。

这可能看起来很明显,但我花了两天才解决这个问题 :-(
Craig Buchek
17 年前
注意:将 PHP 作为 CGI 程序运行将更改 $_SERVER['SCRIPT_NAME'] 的值。当通过(正常)mod_PHP 机制运行时,它将设置为正在运行的 PHP 脚本的名称(实际上是路径)。当通过 CGI 运行时,它将改为指向 CGI 二进制文件的路径。
[email protected]
20 年前
suexec 的替代方案是 suphp (http://www.suphp.org)。

“suPHP 是一种使用其所有者权限执行 PHP 脚本的工具。它包括一个 Apache 模块(mod_suphp)和一个由 Apache 模块调用的 setuid root 二进制文件(suphp),用于更改执行 PHP 解释器的进程的 uid。”(来自网站)
[email protected]
23 年前
suEXEC 需要 CGI 模式,并且会降低脚本速度。我这样做
1. 将 php 安装为 DSO 模式。(速度最快,安全性最低)
2. 使用 --enable-force-cgi-redirect 创建一个单独的 CGI 安装,将 php 放置到 cgi-bin
3. 为了使用 suEXEC 获得更高的安全性,请选择以下方法之一
3-1:将包含此内容的 .htaccess 文件放置到覆盖主配置
AddType application/x-httpd-wphp php
Action application/x-httpd-wphp /cgi-bin/php
子目录中的所有 php 文件都将受到保护。
3-2:在 httpd.conf 中添加以下内容
AddType application/x-httpd-wphp sphp
Action application/x-httpd-wphp /cgi-bin/php
然后每个敏感的 php 文件都应该重命名为 .sphp

在 httpd.conf 中的每个虚拟主机指令中添加“php_value doc_root /home/user/html_docs”。
匿名
20 年前
PHP 与 Apache 和 suEXEC 的工作方式如下
(假设 suEXEC 已经安装并正常工作)

将 PHP 安装为 CGI 二进制文件(例如,在 /usr/local/bin/php 中)
(使用 --enable-force-cgi-redirect 编译)

在 cgi-bin 目录中创建一个链接,使 php-cgi 可访问
cd /usr/local/apache/cgi-bin
ln /usr/local/bin/php php

编辑您的 httpd.conf 文件
AddHandler php4-script .php
Action php4-script /cgi-bin/php

<VirtualHost 123.456.789.0:80>
User exampleuser
Group examplegroup
...

</VirtualHost>

重新启动 Apache

现在,PHP 脚本将在 exampleuser 的用户 ID 和 examplegroup 的组 ID 下调用。
[email protected]
21 年前
Windows 用户的提示

只是给您一个提示,不要犯和我一样的错误
我刚刚发现 PHP 似乎首先在 php 目录中查找 php.ini,如果该文件不存在,它将在 Windows 目录中查找。
我将 php.ini-dist 文件重命名为 php.ini,并将它复制到我的 Windows 目录中,然后我在位于 Windows 目录中的 php.ini 文件中修改了臭名昭著的“cgi.force_redirect = 0”,以使其正常工作。但这没有用,因为它从“原始”php.ini 中读取 - 因此当我删除这个 php.ini 时,一切又恢复正常。
[email protected]
20 年前
使用 VirtualHosts 的 PHP CGI。

这是我在尝试让 php 与 Apache VirtualHosts 一起作为 CGI 工作时发现的。

通过启用“force-cgiredirects”,您*必须*
1) 在 php.ini 中设置“cgi.fix_pathinfo=1”。
2) 将 doc_root 注释掉(php.ini 也是)。

如果您错过了项目 1,apache 日志将显示 php 二进制文件中的“意外 T_STRING”。
如果您错过了项目 2,您只会看到“未指定输入文件”,而不是预期的输出。

然后,您可以通过定义来打开特定 vhost 的 php 支持

Action php-script /cgi-bin/php

在相应的 <VirtualHost> 指令中。
[email protected]
19 年前
我注意到有些人提到,与编译后的模块相比,将 PHP 作为 CGI 程序运行可能会很慢。有些人提到他们想使用 FastCGI 但犹豫不决。我发现使用 Apache 2 的 CGID 模块是将性能提高到几乎与“so”安装的 PHP 模块相同的水平的好方法,但您还可以获得在自己的用户和组下运行每个虚拟主机的额外好处。

在我的测试中,使用 PHP 作为模块,每秒可以生成 44 页,通过 CGID 运行 PHP 作为 CGI 程序,性能也大致相同(在 5% 以内)。

CGID 设置起来也非常容易。只需在你的 Apache 配置命令中添加 --enable-cgid,你就可以开始了。只需像通常一样将 PHP 设置为 CGI 程序。

我确信这种方法会消耗额外的内存,但内存现在很便宜,所以这在尝试加快 PHP CGI 速度时不应该是一个主要因素。
To Top