解决Veracode的CWE-73: “外部控制文件名或路径” MVC应用程序的一种方法是使用白名单验证来限制允许访问的文件或路径。
以下是一个示例代码,展示了如何使用白名单验证来解决该问题:
public ActionResult DownloadFile(string fileName)
{
// 定义允许访问的文件白名单
List<string> allowedFiles = new List<string> { "file1.txt", "file2.txt", "file3.txt" };
// 验证请求的文件名是否在白名单中
if (allowedFiles.Contains(fileName))
{
// 构造文件路径
string filePath = Path.Combine(Server.MapPath("~/Files"), fileName);
// 检查文件是否存在
if (System.IO.File.Exists(filePath))
{
// 执行文件下载操作
byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);
return File(fileBytes, "application/octet-stream", fileName);
}
else
{
return HttpNotFound();
}
}
else
{
return HttpNotFound();
}
}
在上面的示例中,我们首先定义了一个允许访问的文件白名单 allowedFiles
,包含了几个允许下载的文件名。然后,我们在接收到文件名参数时,首先验证请求的文件名是否在白名单中。如果文件名在白名单中,我们将构造文件路径,并检查文件是否存在。如果文件存在,我们将执行文件下载操作,并返回文件内容。如果文件名不在白名单中,或者文件不存在,我们将返回一个HTTP 404错误。
这种方法可以有效地解决CWE-73问题,因为它限制了允许访问的文件或路径,并防止外部控制文件名或路径导致的安全漏洞。