PHP 的 realpath()
在 manual 中有详细描述,我只是想了解它在哪些场景下有用。因为看起来我的代码可以很好地处理 ../../path
这样的路径,所以我不确定 realpath()
在哪里有用甚至是必要的。
最佳答案
坏消息是
当您在路径中使用“点-点-斜杠”时,您处于警告状态,可能会使用 Path Traversal 被攻击 , 这种攻击旨在访问存储在 web 根文件夹之外的文件和目录。通过使用"dot-dot-slash"(../) 序列及其变体引用文件的变量,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码、配置和关键系统文件,受系统操作访问控制限制。攻击者使用“../”序列向上移动到根目录,从而允许在文件系统中导航。
这种攻击可以通过在路径上注入(inject)外部恶意代码来执行,例如 Resource Injection 攻击。要执行此攻击,无需使用特定工具;攻击者通常使用蜘蛛/爬虫来检测所有可用的 URL。
这种攻击也被称为“点-点-斜线”、“目录遍历”、“目录爬升”和“回溯”。
你可以检查一下..
而且,好消息是......
realpath() 可让您将任何可能包含相对信息的路径转换为绝对路径。然后,您可以确保该路径位于您要允许访问的特定子目录下。
对于绝对路径,例如 URL,您的子域和协议(protocol)是可以控制的。通过模糊子域进入的人将被引导到正确的子域中。您可以根据需要在安全和非安全之间来回切换。而且,使用它是可配置的,开发人员喜欢绝对的东西。
您可以在使用绝对 URL 时设计简洁的算法。可以将 URL 设置为可配置的,以便可以通过在单个配置文件中进行一次更改来在整个站点范围内更新 URL。
但是如果你看看这个:
<a href=“index.php?q=”>index.php?q=</a>
<link src=“../.././../css/default.css” />
你不会混淆吗?
- 令人困惑,那是多少个点?那是多少个文件夹?哪里 文件?为什么它不起作用?
- MAINTENANCE,如果文件被意外移动,资源将停止加载, 链接将用户发送到错误的页面,表单数据可能会发送到 不正确的页面。如果文件需要移动所有资源 将要退出加载的所有链接 不正确需要更新。
- 它无法扩展,当网页变得更加复杂且浏览量增加时 开始跨多个页面重用相关链接将 相对于包含它们的文件。如果你有一个 然后将出现在每个页面上的 HTML 导航片段 relative 将相对于很多不同的地方。首先 人们在开始创建模板时意识到的是 他们需要一种方法来管理 URL。
- COMPUTED - 它们由您的浏览器实现(希望根据 到 RFC)。参见中的第5章RFC3986 .
- 糟糕!!! - 错误或拼写错误可能会导致蜘蛛陷阱。
抱歉我的英语不好... :)
关于php - 为什么要使用 realpath()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992329/