我在VB.Net源上运行了IBM AppScan工具。我在Path Traversal类别下的File.Copy方法中遇到了一个安全问题。
问题详情 - 漏洞类型 - PathTraversal 此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
答案 0 :(得分:0)
可能认为findByType: function(type) {
check(type, Match.Where((type)=>{
check(type, String);
return type=="user" || type=="admin";
}));
Accounts.find({role: type});
}
是不受信任的用户输入(我已经看到AppScan Source与Java项目中的配置相似),所以它抱怨你&#39 ;使用不可信的输入创建一个可能包含分隔符的路径。
如果AppSettings
,drive
和folder
中的任何一个确实来自不受信任,那肯定会出现问题。但是假设您的配置只有受信任的管理员才能访问,这一点都不算什么。将配置视为未经检查的来源非常愚蠢,但是污染跟踪工具通常非常愚蠢。
这里处理文件名相当古怪。在使用XML编码文件名之前,这似乎不太可能是一个好主意; filename
和ToString
步骤完全是多余的;并且检查“无效”字符的整个路径并不能防止单个部件的注入。这个东西试图解决AppScan的问题吗? InvalidPathChars检查没有帮助,因为它没有直接编码/验证并返回受污染的值,而XmlEncode只有在该函数被明确标记为验证/编码函数时才有用。
它'悲伤使代码,以试图满足静态分析器的一个钝器更断裂。你是否可以添加一个函数作为Format
值的包装器,并告诉AppScan它是一个验证/编码函数,所以它不认为值被污染了?或者只是忽略/沉默虚假警告?
答案 1 :(得分:0)
System.Configuration.ConfigurationManager.AppSettings可以被视为一个安全的来源,你可以只是排除调查结果,以免它再次出现。
另一方面,该代码可被视为具有较差的安全编码实践。如果将“System.Configuration.ConfigurationManager.AppSettings”替换为类似Web UI输入的内容,则最终用户可以控制“folder”“drive”和“filename”的值,这将成为严重的路径遍历问题。