首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAT.NET“在将文件路径传递给文件系统例程之前对其进行清理”消息

CAT.NET“在将文件路径传递给文件系统例程之前对其进行清理”消息
EN

Stack Overflow用户
提问于 2009-12-31 15:43:51
回答 2查看 2.1K关注 0票数 2

我正在使用CAT.NET代码分析来分析我的代码(C#,桌面应用程序),并在处理文件名时收到“在将文件路径传递给文件系统例程之前清理它”的消息。我不明白的是,为了确保文件名有效,我使用:

代码语言:javascript
复制
void SomeMethod(String filename)
{
    filename = System.IO.Path.GetFullPath(filename);
    // ... Do stuff
}

这难道不是解决无效文件名问题的“神奇解决方案”吗?我读过类似的here (第一个答案),但在我的例子中,我只处理本地文件,嗯,一些非常基本的东西,所以……

那么,为什么我会收到这条消息,以及如何避免收到它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-22 03:24:56

我知道这是一个老生常谈的问题,但我刚刚发现了一些与CAT.Net错误消息相关的可能有帮助的东西。

在关于CAT.Net数据流规则的blog post中,他们对FileCanonicalizationRule有这样的说法

描述

文件处理例程中使用的

用户输入可能会导致文件规范化漏洞。如果代码根据作为输入传递给程序的资源的名称做出任何决定,那么它特别容易受到规范化问题的影响。文件、路径和URL是容易被规范化的资源类型,因为在每种情况下都有许多不同的方式来表示相同的名称。

解析

在将文件路径传递给文件处理例程之前,

会对其进行清理。使用Path.GetInvalidFileNameChars或Path.GetInvalidPathChars获取无效字符并将其从输入中删除。欲了解更多信息,请访问http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidfilenamechars.aspx

因此,他们建议您使用Path.GetInvalidFileNameCharsPath.GetInvalidPathChars来验证路径。

请注意,他们的建议是删除无效字符。虽然这确实会使路径有效,但它可能会导致用户的意外行为。正如this问题/答案上的评论所建议的那样,提前退出并告诉用户他们的路径无效可能更好,而不是对他们的输入做一些意想不到的事情(比如删除不好的字符并使用修改后的版本)。

票数 1
EN

Stack Overflow用户

发布于 2009-12-31 15:50:10

如果文件名来自用户,它可能类似于“../etc/passwd”-错误消息告诉您需要对其进行清理,以便它无法访问不应该访问的目录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1984426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档