如何修复Fortify扫描报告中关于以下代码示例的“路径操纵”问题

4
我有一个路径操纵问题。下面的代码放在ASPx页面的Page_load方法中。
String rName = Request.QueryString["reportName"];
string path = "C:\\hari" + rName;
if (File.Exists(path))
{
    File.Delete(path);
}

但是上述示例代码的Fortify扫描报告显示存在“路径操纵”问题,属于高风险。需要帮助修改以上代码以通过Fortify扫描。

2个回答

6
杰克逊是正确的,这是一种可以通过间接选择来修复的直接文件路径操作漏洞。 从您已知的目录中列出所有文件。使用来自您自己的目录列表的值,而不是用户提供的值。
String rName = Request.QueryString["reportName"];
String knownPath = "C:\\hari";
DirectoryInfo di = new DirectoryInfo(knownPath);
FileInfo[] files = di.GetFiles(rName);

if (files.length > 0)
{
    files[0].Delete();
}

如果我们尝试打开现有的文件,怎么样? - Philly

1

我认为问题在于有人可能会伪造一个请求,其中reportName = "..\\Windows\\Something important",这显然是一个安全漏洞。您需要更改代码,使其不从请求查询字符串中读取部分文件名。


请提供上述代码需要哪些更改。 - user517206
不好意思,没有更多的信息我无法回答。您想用这个网页做什么? - Jackson Pope
这只是一个示例网页。我在这个问题中提供的示例只是一个样本。如果我得到了答案,我可以使用相同的逻辑来解决其他应用程序中的问题。 - user517206

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接