gpt4 book ai didi

php - 在没有 realpath() 的情况下清理 PHP 中的文件路径

转载 作者:可可西里 更新时间:2023-10-31 23:58:33 25 4
gpt4 key购买 nike

有没有一种方法可以在不使用 realpath() 的情况下安全地清理路径输入?

目的是防止像../../../../../path/to/file这样的恶意输入

 $handle = fopen($path . '/' . $filename, 'r');

最佳答案

不确定为什么您不想使用realpath,但路径名清理是一个非常简单的概念,大致如下:

  • 如果路径是相对路径(不以 / 开头),则在其前面加上当前工作目录和 /,使其成为绝对路径。
  • 将多个 / 的所有序列替换为单个 (a)
  • 将所有出现的 /./ 替换为 /
  • 删除 /. 如果在末尾。
  • /anything/../ 替换为 /
  • 删除 /anything/.. 如果在最后。

在这种情况下,文本 anything 表示不是 / 的最长字符序列。

请注意,应连续应用这些规则,直到它们都不会导致更改为止。换句话说,做所有六个(一次通过)。如果字符串发生变化,则返回并再次执行所有六个操作(另一遍)。继续这样做,直到字符串与刚刚执行的传递之前相同。

完成这些步骤后,您就有了一个规范的路径名,可以检查其是否为有效模式。最有可能的是任何不以 ../ 开头的内容(换句话说,它不会尝试移动到起点之上。您可能还想应用其他规则,但那是超出了这个问题的范围。


(a) 如果您使用的系统将路径开头处的 // 视为特殊,请确保替换多个 / 个字符以 两个 开头。这是 POSIX 唯一允许(但不强制)对倍数进行特殊处理的地方,在所有其他情况下,多个 / 字符等同于单个字符。

关于php - 在没有 realpath() 的情况下清理 PHP 中的文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21421569/

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