首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB.Net中File.Copy方法中的IBM AppScan安全PathTraversal问题

VB.Net中File.Copy方法中的IBM AppScan安全PathTraversal问题
EN

Stack Overflow用户
提问于 2016-09-19 17:28:48
回答 2查看 666关注 0票数 0

我在VB.Net源上运行了IBM AppScan工具,在路径遍历类别下的File.Copy方法中遇到了一个安全问题。

问题详细信息-漏洞类型- PathTraversal此接口接受目录和/或文件名。如果使用用户提供的数据创建文件路径,则可以对该路径进行操作,使其指向不允许访问或可能包含恶意数据或代码的目录和文件。

如何解决此问题?

代码语言:javascript
复制
Imports System.Web.Security.AntiXss
Private Function ProcessFile() As Boolean
    Dim drive As String = String.Empty
    Dim folder As String = String.Empty
    Dim filename As String = String.Empty
    Dim sourcePath As String = String.Empty
    Dim destinationPath As String = String.Empty
    drive = AntiXssEncoder.XmlEncode(String.Format("{0}", System.Configuration.ConfigurationManager.AppSettings("Drive").ToString()))
    folder = AntiXssEncoder.XmlEncode(String.Format("{0}", System.Configuration.ConfigurationManager.AppSettings("Folder").ToString()))
    filename = AntiXssEncoder.XmlEncode(String.Format("{0}", System.Configuration.ConfigurationManager.AppSettings("File").ToString()))

    sourcePath = Path.Combine(drive, folder, filename)
    destinationPath = Path.Combine(drive, folder, "text2.txt")

    Try
        If sourcePath.IndexOfAny(Path.GetInvalidPathChars()) = -1 AndAlso destinationPath.IndexOfAny(Path.GetInvalidPathChars()) = -1 Then
            File.Copy(sourcePath, destinationPath, True)
            Return True
        Else
            Return False
        End If

    Catch ex As Exception
        Return False
    End Try
End Function
EN

回答 2

Stack Overflow用户

发布于 2016-09-20 03:56:30

它可能认为AppSettings是不受信任的用户输入(我见过Java源对AppScan项目中的配置做类似的操作),所以它抱怨您正在创建一个包含不受信任的输入的路径,其中可能包含分隔符。

如果drivefolderfilename中的任何一个确实来自不可信,这肯定是一个问题。但是,假设只有受信任的管理员才能访问您的配置,这不算什么。把config当做未经检查的源码是很愚蠢的,但污点跟踪工具通常也是很愚蠢的。

这里对文件名的处理相当古怪。在使用文件名之前对其进行XML编码似乎不太可能是一个好主意;ToStringFormat步骤完全是多余的;而且检查整个路径中的“无效”字符也不能防止来自单个部分的注入。这个东西是不是试图绕过AppScan?InvalidPathChars检查不会有什么帮助,因为它不会直接编码/验证和返回受污染的值,而XmlEncode只有在该函数被显式标记为验证/编码函数时才会有帮助。

为了满足静态分析器的迟钝工具,让代码变得更糟糕是很可悲的。您是否可以添加一个函数作为AppSettings值的包装器,并告诉AppScan它是一个验证/编码函数,这样它就不会认为这些值被污染了?或者只是忽略/静默虚假的警告?

票数 0
EN

Stack Overflow用户

发布于 2016-10-07 23:14:05

System.Configuration.ConfigurationManager.AppSettings可以被认为是一个安全的来源,你可以只排除这些发现,这样它就不会再次出现。

另一方面,这种代码可以被认为具有较差的安全编码实践。如果您将"System.Configuration.ConfigurationManager.AppSettings“替换为类似web UI输入的内容,则最终用户可以控制”文件夹“、”驱动器“和”文件名“的值,这将成为一个严重的路径遍历问题。

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

https://stackoverflow.com/questions/39569715

复制
相关文章

相似问题

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