gpt4 book ai didi

php - 获取 PATH_INFO 的便携且安全的方法

转载 作者:可可西里 更新时间:2023-11-01 12:31:10 25 4
gpt4 key购买 nike

我正在寻找一种便携方式来接收(方便的)$_SERVER['PATH_INFO'] 变量。

看了一会儿,发现 PATH_INFO 源自 CGI/1.1,我并不总是出现在所有配置中。

获取该变量的最佳(主要是安全方面)方法是什么 - 除了手动提取它(安全问题)。

最佳答案

好吧,我(几乎)确定如果不使用 $_SERVER 超全局键,提供另一种方法来找出 PATH_INFO 是不可能的,那被说lets first list all of the $_SERVER keys我们可能可能使用:

  • 'PHP_SELF'
  • “QUERY_STRING”
  • 'SCRIPT_FILENAME'
  • 'PATH_TRANSLATED'
  • 'SCRIPT_NAME'
  • 'REQUEST_URI'
  • 'PATH_INFO'
  • 'ORIG_PATH_INFO'

我们显然需要忽略最后两个。现在我们应该(我不知道这个事实,我只是假设因为你这么说)过滤你提供的链接中存在的所有键(which BTW is offline ATM),留下我们使用以下键:

  • 'PHP_SELF'
  • 'SCRIPT_FILENAME'
  • 'REQUEST_URI'

关于您对 Anthonys answer 的评论:

You are just juggling variables now. SCRIPT_FILENAME is a part of the CGI spec. It will not be available if PATH_INFO is unavailable. As for REQUEST_URI, it's apache's mod_rewrite specific. – LiraNuna

我正在运行 LightTPD/1.4.20-1 (Win32),PHP 5.3.0 作为 CGI,cgi.fix_pathinfo = 1$_SERVER['REQUEST_URI' ] 对我来说非常有用,我还记得在没有人使用 mod_rewrite 的日子里使用过相同的变量,所以我诚实谦虚的猜测是你'在这一点上显然是错误的。关于 SCRIPT_FILENAME key ,我无法在 ATM 上测试该 key 。尽管如此,如果我们非常努力地闭上眼睛并相信您是对的,那么我们只剩下一个变量:

  • 'PHP_SELF'

我并不想在这里变得苛刻(而且我仍然相信有更多的解决方案)但是如果 PHP_SELF 是您希望我们使用的唯一 key (假设有PHP_SELF 本身没有强加)只剩下一个解决方案:

function PATH_INFO()
{
if (array_key_exists('PATH_INFO', $_SERVER) === true)
{
return $_SERVER['PATH_INFO'];
}

$whatToUse = basename(__FILE__); // see below

return substr($_SERVER['PHP_SELF'], strpos($_SERVER['PHP_SELF'], $whatToUse) + strlen($whatToUse));
}

此函数应该可以工作,但是使用__FILE__ 常量可能会出现一些问题,因为它返 echo 明__FILE__ 常量的文件的路径,并且不是请求的 PHP 脚本的路径,所以这就是 $whatToUse 存在的原因:所以你可以'SCRIPT_FILENAME' 替换它,或者如果你真的相信你所说的,只需使用 '.php'

您还应该 read this regarding why not to use PHP_SELF .

如果这对你不起作用,我很抱歉,但我能想到其他的。

编辑 - 为您阅读更多内容:

关于php - 获取 PATH_INFO 的便携且安全的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1884041/

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