我在VB上运行IBM AppScan工具。净源。我在文件中得到一个安全问题。路径遍历目录下的复制方法。
Issue Detail -漏洞类型-路径遍历这个API接受目录、文件名,或者两者都接受。如果使用用户提供的数据来创建文件路径,则可以操纵该路径以指向不允许访问或可能包含恶意数据或代码的目录和文件。
如何解决这个问题?
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
它可能认为AppSettings
是不受信任的用户输入(我在一个Java项目中看到AppScan Source对config做了类似的处理),所以它会抱怨你用不受信任的输入创建了一个路径,可以在。
如果drive
, folder
和filename
中的任何一个确实来自不受信任的地方,这肯定是一个问题。但是,假设只有受信任的管理员才能访问您的配置,这没什么。把config当作未检查的源代码是非常愚蠢的,但是污染跟踪工具通常是非常愚蠢的。
这里对文件名的处理相当古怪。在使用文件名之前对其进行xml编码似乎不太可能是一个好主意;ToString
和Format
步骤完全是多余的;检查整个路径中的"无效"字符并不能防止来自单个部分的注入。这个东西是试图绕过AppScan吗?InvalidPathChars检查没有帮助,因为它没有直接编码/验证并返回受污染的值,而XmlEncode只有在该函数被显式标记为验证/编码函数时才会有所帮助。
为了满足静态分析器这一生硬的工具而使代码更加破碎,这是很可悲的。您是否可以添加一个函数作为AppSettings
值的包装器,并告诉AppScan它是一个验证/编码函数,因此它不认为值被污染?或者只是忽略/沉默虚假的警告?
System.Configuration.ConfigurationManager。AppSettings可以被认为是一个安全的来源,你可以排除这些发现,这样它就不会再出现了。
另一方面,该代码可以被认为具有较差的安全编码实践。如果你替换"System.Configuration.ConfigurationManager. "AppSettings"之类的东西,然后最终用户可以控制"文件夹"、"驱动器"one_answers"文件名"的值,这就变成了一个严重的路径遍历问题。