为什么要使用realpath()?

时间:2015-03-11 16:37:33

标签: php

PHP realpath()manual中得到了很好的描述,我只是想了解它在哪些场景中很有用。因为似乎我的代码与../../path之类的路径运行良好,所以我不确定realpath()在哪里有用甚至是必要的。

2 个答案:

答案 0 :(得分:3)

糟糕的新闻

当您使用“dot-dot-slash”作为路径时,您处于警告状态,使用Path Traversal 攻击,此攻击的目的是访问那些文件和目录存储在Web根文件夹之外。通过使用“dot-dot-slash”(../)序列及其变体来操纵引用文件的变量,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码,配置和关键系统文件,受系统操作访问控制的限制。攻击者使用“../”序列移动到根目录,从而允许通过文件系统进行导航。

此攻击可以通过路径上的外部恶意代码注入执行,例如 Resource Injection 攻击。要执行此攻击,不必使用特定工具;攻击者通常使用蜘蛛/爬虫来检测所有可用的URL。

这种攻击也被称为“dot-dot-slash”,“目录遍历”,“目录攀爬”和“回溯”。

你可以检查一遍..

并且,好消息是....

realpath()允许您将任何可能包含相对信息的路径转换为绝对路径。然后,您可以确保该路径位于您要允许访问的某个子目录下。

对于URL等绝对路径,可以控制子域和协议。通过一个不起眼的子域进入的人将被汇入正确的子域。您可以根据需要在安全和非安全之间来回跳转。并且,使用它可以是可配置的,开发人员喜欢绝对的东西。

使用绝对URL时,您可以设计整洁的算法。 URL可以进行配置,以便只需在单个配置文件中进行一次更改即可在站点范围内更新URL。

但如果你看一下:

<a href=“index.php?q=”>index.php?q=</a>
<link src=“../.././../css/default.css” />

你不是在混淆吗?

  1. ConfUSING ,这是多少个点?这是多少个文件夹?哪里 文件?为什么不工作?
  2. MAINTENANCE ,如果文件意外移动资源退出加载, 链接将用户发送到错误的页面,表单数据可能会被发送到 不正确的页面。如果一个文件需要移动所有资源 将要退出加载和所有链接 不正确需要更新。
  3. 当网页变得更加复杂和观看时,
  4. 它不会扩展 开始在相关链接将跨多个页面重用 相对于它们被包含在的文件。如果你有 然后将在每个页面上的HTML导航片段 亲戚会相对很多不同的地方。首先 当人们开始创建模板时,人们会意识到这一点 他们需要一种方法来管理网址。
  5. COMPUTED - 它们由您的浏览器实现(希望根据 到RFC)。请参阅 RFC3986
  6. 中的第5章
  7. OOPS !!! - 错误或拼写错误会导致蜘蛛陷阱。
  8. 抱歉我的英语不好......:)

答案 1 :(得分:1)

根据我的经验,我发现realpath()

1。清晰度

更希望显示/记录/存储完整路径而不是相对路径。

2。安全

在执行某些操作(服务,编辑等)之前,请确保给定的文件路径位于文件系统层次结构中的之下(在文件系统层次结构中) >

示例:

$full_path = realpath( $relative_path );

if( $full_path !== false && strpos( $full_path, "/var/www/whatever/" ) === 0 )
{
    //...
}

几件事值得一提:

realpath()解析符号链接。

如果文件或目录不存在,

realpath()返回FALSE