如何修复C#asp.net中的目录遍历安全漏洞?

时间:2019-09-23 21:00:18

标签: asp.net security owasp

Find Snapshot here在为我的一个asp.net mvc Web应用程序运行[IBM Security AppScan]工具时,我的代码中出现了路径遍历漏洞。请参阅所附的快照和示例代码,以更好地了解此问题。有办法解决此类问题吗?

示例代码:

var storagePath = ConfigurationManager.AppSettings.Get("DOCS_STORAGE_PATH") + @"\Attachments";
var strMonth = DateTime.Now.Month.ToString().Length == 1 ? "0" + DateTime.Now.Month : DateTime.Now.Month.ToString();
var strYear = DateTime.Now.Year.ToString();
var strFolder = strYear + @"\" + strMonth + @"\";
storagePath = storagePath + @"\" + strFolder;

if (!Directory.Exists(@"" + storagePath))
{
    Directory.CreateDirectory(@"" + storagePath);
}

2 个答案:

答案 0 :(得分:0)

您需要执行输入验证来解决问题。 您应该在读取配置后在第一行中验证storagePath。

但是,无论如何,如果路径存储在服务器上的配置中,我怀疑来自AppScan Source的错误提示

答案 1 :(得分:0)

如果您使用的是asp.net MVC框架,则无需担心配置文件,dll,cshtml文件等的目录遍历最少。IIS不会为这些类型的敏感信息提供任何费用。但是,如果配置文件中包含一些敏感信息,例如密码,连接字符串等,则始终可以加密配置文件。

最好在配置文件中加密机器密钥和连接字符串信息,以便于使用。

接下来的一点是,如果文件保存了我们的自我,则可能在数据库中或服务器路径中。 在这两种情况下,我们都必须谨慎对待攻击。不仅directory attack,而且还有file upload attack

如果用户可以读取您的文件共享,则您的应用程序池为 在默认情况下(网络服务)下运行,您可以删除虚拟 完全目录并创建一个ASP.NET(任何框架)应用程序 会将文件流式传输到浏览器。如果您使用的是MVC 只需返回文件结果。这有一个额外的好处,就是您 将能够限制用户下载文件

注意:由于您从web.config中获取路径并不意味着,该路径下的文件可以防止目录攻击。如果黑客以某种方式获得了路径,那么他可以直接在浏览器\黑客工具\等中尝试该路径。因此,目标应该是保护文件而不是路径

简单的想法是创建另一个能够根据请求提供文件流服务的应用程序/方法。您可以在那里验证用户并提供文件,甚至可以将文件保存在数据库或文件系统中(应用程序池用户没有直接访问权限)

相关问题