使用 Path.Combine 时出现路径遍历警告

2023-12-14

我目前正在使用 NewtonJSON 从 JSON 文件加载一些 UI 数据。但是,有一个警告说我有路径遍历。

情况如下:

enter image description here

有办法消除这个安全漏洞吗?


当用户或其他不可信源提供的路径未经检查而与父路径组合时,路径遍历漏洞就可能发生。问题在于路径的“路径遍历”组件允许导航出父文件夹。

例如,如果您要组合以下两个路径(绝对路径和相对路径):

Base/absolute path: C:\WebData
Relative/user path: ..\windows\system32\

那么这将产生:

C:\windows\system32\

正如你可以想象的那样,让某人读取或写入这个目录,这不是预期的WebData目录,可能是一个巨大的问题,因为它可能导致某人了解有关您的系统的信息或放置危害系统的漏洞,从而将系统控制权交给恶意行为者。

You can 阅读有关此漏洞的更多信息.

要正确处理此漏洞,需要确保与父路径结合的相对路径是安全的。以下是一些确保这一点的方法:

  • 相对路径来自已知的可信来源,例如经过审查的内部列表。
  • 相对路径之前已被检查并以确保可以将其与不可信路径区分开的方式存储/维护,并且同时不能被用户或不可信代理修改。例如,将路径保存在字符串中是bad主意。相反,你会做一些类似创建一个TrustedPath实际上,代码只能通过运行检查路径是否安全的代码来获取该类的实例。
  • 组合后检查生成的路径以确保其位于正确的位置。

您可以像这样执行最后一项(以下所有内容):

  1. (作为避免不必要的异常的良好做法),使用Path. GetInvalidFileNameChars() 检查(不受信任的)相对路径中是否存在无效字符。
  2. Perform Path.Combine()正如你所做的那样。
  3. 确保生成的路径仍在原始父路径内。这可以通过简单地确保生成的路径以父路径开头来完成,但这可能存在问题。所以考虑像这样的答案或其他确保结果路径的代码truly所需文件夹的后代。

完成所有这些操作后,如果仍然显示“路径遍历”警告,您可以使用代码质量/安全检查工具中的菜单选项将此路径遍历实例注释为安全。您可能还想添加注释,解释为什么将其标记为安全,其中可能包含指向此 SO 问题或其答案之一的链接。

Note 1

重用已证明可以与特定绝对路径组合的相对路径时要小心。考虑以下:

Base/absolute path: C:\WebData\FormElements\SuperForm\windows\
Relative/user path: ..\windows\

这两个路径可以安全地组合,但这并没有证明相对路径始终可以安全地使用any绝对路径。

Note 2

小心你如何处理这件事。假设相对路径遍历总是以..\是一个错误。以下是有效的相对路径:folder\..\..\wheeeWeGotOut.

Note 3

另一个答案提出,可以通过简单地删除无效字符并禁止包含以下内容的路径来保证安全性:.. or :。由于多种原因,这是有问题的:

  • 许多非 Windows 文件系统(例如 HFS 或 Linux)中的文件可以合法地具有这些字符。例如,a:filename and another..filename完全没问题(我刚刚测试过它们)。限制这些字符会限制用户可以执行的操作。

  • 尝试改进过滤以允许合法用例通过并不是一个好主意。你怎么知道你已经正确编写了这段代码并且没有错过边缘情况?

  • But 最重要的是:如果用户允许的路径中有一个意外的符号链接指向文件系统中其他位置的文件怎么办?如果用户能够编写可用作符号链接的文件,或者有其他漏洞导致写入或复制此类文件,该怎么办?路径利用可能不是孤立的。它通常是小型漏洞利用的组合,导致大型漏洞利用(下一个漏洞与前一个漏洞交叉或升级)。这only确保文件或目录位于正确位置的安全技术是,在完成所有其他过滤、传递和组合之后,检查结果是否仍在预期位置内或者是直接后代(注意符号链接) 。

  • 至于硬链接——那是另一回事了。祝一切顺利。不要建立硬链接。很难判断硬链接是否存在,因为它是低级修改。如果您有兴趣,请阅读它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Path.Combine 时出现路径遍历警告 的相关文章

随机推荐

  • 如何使用 System.Drawing 绘制表格

    我想使用 System Drawings 绘制一个表格 然后用一些文本填充单元格 该文本每隔几秒钟就会在不同的时刻发生变化 这是一个游戏 其中有一个网格 每隔几秒钟 随机单元格就会显示一个数字 然后用户必须在其下面的文本框中输入答案 此外
  • R中字符类的计数函数

    我的代码正常工作 然后 RStudio 崩溃了 当我重新打开它时 我的一行代码现在不起作用 CodeTable lt count unique Data Code 以前 这创建了一个包含 3 列的简单数据库 1 数字顺序 2 唯一代码 3
  • 从android中点击通知获取数据

    嘿伙计们 我需要帮助如何从使用广播接收器设置的待处理意图中获取数据 我想要发生的是在单击通知时获取我的活动所需的 id 数据 这就是我制作额外内容的方式 public class AlertReceiver extends Broadcas
  • 如何在 Haskell 中计算直方图?

    I found Statistics Sample Histogram 但我似乎无法使用它 如果我希望能够将列表分为四个类别 我希望能够执行以下操作 import Statistics Sample Histogram histogram
  • Opencv:您的设备似乎不支持相机(或者已锁定)

    我在 Android 4 0 4 的三星平板电脑上使用 opencv 2 4 5 的 Face Detection 和 Android 4 2 2 该应用程序可以使用前置摄像头来校准我的脸部 但是 当我使用此应用程序同时播放视频和面部检测时
  • 应用程序启动时导航抽屉始终处于膨胀状态

    我正在尝试将导航抽屉添加到我的主要活动中 在 Activity main xml 的设计视图中 它应该作为阴影动画在活动布局的左侧可见 我不知道我应该在这里使用什么术语 向右拖动 滑动时应该可见 但就我而言 它默认覆盖整个活动 并且不显示活
  • 获取 Dynamics 365 的身份验证令牌时出现错误 AADSTS90002

    我在尝试从 Net 客户端使用 Dynamics 365 进行身份验证时遇到以下错误 AADSTS90002 Tenant authorize not found This may happen if there are no active
  • 无法在带有 Xcode 4.3.1 和 IOS 的 iPhone 4.2.1 上运行应用程序

    我希望有人可以提供帮助 这个问题已经困扰我一段时间了 我正在运行 Xcode 4 3 1 和基本 SDK iOS 5 1 iPhone版本是4 2 1 我相信是旧的3S型号 当点击 运行 时 Xcode 编译正常 并表示它正在手机上运行我的
  • 将 unicode 转换为 char

    如何将 Unicode 字符串转换为char or char const in 内河码头 c String text Hello world char txt AnsiString text c str Older text t str i
  • 如何在 C# 中监控剪贴板内容变化? [复制]

    这个问题在这里已经有答案了 I want to have this feature in my C program When the user do Ctrl C or Copy anywhere i e when the clipboar
  • 在matlab中找到峰值

    假设我们确定向量中的峰值如下 我们有长度为 m 的实数值一维向量 或者 x 1 x 2 x 米 如果 x 1 gt x 2 则显然对于第一个点 Peak 1 x 1 否则我们将 x 3 与 x 2 进行比较 如果 x 3 indexes p
  • 如何将工具提示添加到 JavaFX Canvas 的矩形区域

    在我的 JavaFX 应用程序中 我有一个TableView具有多个列 其中一列以图形形式显示数据 为此 我创建了一个CanvasCell创建并管理自己的对象Canvas来处理绘图 绘图部分工作得很好 我现在想把Tooltips范围内的一些
  • 我怎样才能得出这个观点?

    List gt l user我有一个List具有用户引用字段的节点 l user Story gt s user然后我有Story也有用户引用字段的节点 s user 之间没有直接联系List and Story 我想添加一个视图List列
  • GWT 在 CloseHandler 中检测浏览器刷新

    我有一个 GWT 应用程序 我想在用户离开应用程序时运行一些代码以强制注销并删除任何数据等 为此 我使用 CloseHandler 并使用 Window addCloseHandler 注册它 我注意到 当单击刷新按钮时 会运行 onClo
  • dalvikvm:找不到类“android.*”

    在此输入图像描述开发时 应用程序在Android 5 0系统上可以正常使用 但是在5 0以下的系统中会出现应用程序无响应的情况 但不知道是什么原因 错误日志如下 E dalvikvm Could not find class android
  • 如何限制使用 argparse 解析的值(例如,将整数限制为正值)?

    到目前为止我有这个代码 import argparse parser argparse ArgumentParser parser add argument g games type int default 162 help The num
  • 如何在 C# 中重置计时器?

    有三种Timer我所知道的课程 System Threading Timer System Timers Timer and System Windows Forms Timer 但这些都没有 Reset 函数会将当前经过的时间重置为 0
  • C# 将 PDF 文件上传到 Firebase 项目存储?

    你们知道如何将 PDF 文件直接上传到 Firebase 项目存储吗 我在互联网上搜索了很多 但一无所获 有一些 C 的库吗 或者有 C 和 Firebase 的文档吗 请大家帮忙 谢谢 EDIT 好的 我找到了一个库 FirebaseSh
  • 由于异步,在 WebApi 中使用 HttpContext.Current 是危险的

    我的问题与此有点相关 WebApi 相当于具有依赖注入的 HttpContext Items 我们想使用 Ninject 在 WebApi 区域中使用 HttpContext Current 注入一个类 我担心的是 这可能是非常危险 如 W
  • 使用 Path.Combine 时出现路径遍历警告

    我目前正在使用 NewtonJSON 从 JSON 文件加载一些 UI 数据 但是 有一个警告说我有路径遍历 情况如下 有办法消除这个安全漏洞吗 当用户或其他不可信源提供的路径未经检查而与父路径组合时 路径遍历漏洞就可能发生 问题在于路径的