gpt4 book ai didi

php - 什么是 php $_SERVER ['REDIRECT_STATUS' ]?

转载 作者:可可西里 更新时间:2023-11-01 13:24:19 24 4
gpt4 key购买 nike

使用 php,我可以在 $_SERVER 数组中看到索引“REDIRECT_STATUS”,但 php.net 没有提及它。我有一个抛出 404 的自定义错误页面,但“REDIRECT_STATUS”仍然是 200。那么状态代码究竟指的是什么?

最佳答案

php-src code建议 documentation link , 即

<p>For more information as to <i>why</i> this behaviour exists,
see the <a href=\"http://php.net/security.cgi-bin\">\
manual page for CGI security</a>.</p>\n\

阅读有关 CGI 安全性的信息。使用 REDIRECT_STATUS 变量 - 它不是 HTTP header ,而是一个从 Web 服务器传递到 CGI 程序的变量,在本例中是 php-cgi 或 php-fpm 进程 - 你告诉 php-通过直接访问这些 CGI 脚本,cgi 或 php-fpm 处理请求已由 Web 服务器以受控方式处理,而不是以其他方式处理。

过去,您将 Web 服务器配置为处理特殊目录中的 CGI 二进制文件 - 类似于 $DOCROOT/cgi-bin - 并使所有 CGI 脚本可通过某些 URL http:/访问/SERVERNAME/cgi-bin/.

现在,如果您通过这样的(直接)URL http://SERVERNAME/cgi-bin/php-cgi/PATH_TO_PHP_SCRIPT 调用 PHP CGI 程序,php-cgi 的默认行为是处理文档 /PATH_TO_PHP_SCRIPT 从而可能绕过 Web 服务器访问控制。 /PATH_TO_PHP_SCRIPT 文档将被处理,尽管服务器可能不允许/PATH_TO_PHP_SCRIPT,因为请求已经离开 Web 服务器并进入 PHP 进程。在 php 的帮助下,这样的服务器会泄漏信息,您将需要对所有 PHP 脚本的另一个访问检查层。

要停止此行为,您可以将 PHP-CGI 程序配置为仅处理设置了 REDIRECT_STATUS header 的请求,外部客户端不可能在直接请求中设置该 header 。只有 web 服务器——在客户端和 php 之间——可以设置这个头,并且 web 服务器建议一个 HTTP 状态——比如 200、404、403 或你喜欢的——并允许 PHP 处理这个状态。但是,即使此 header 的纯粹存在也会通知 PHP 进程,该请求已由 Web 服务器以常规方式处理。

意见:防止这种用法的更好方法是,将 Web 服务器配置为禁止通过默认/cgi-bin/路径直接调用 PHP CGI。

关于php - 什么是 php $_SERVER ['REDIRECT_STATUS' ]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24378472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com